首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >哪种类型最适合elasticsearch“关键字”(如hashtag)字段?

哪种类型最适合elasticsearch“关键字”(如hashtag)字段?
EN

Stack Overflow用户
提问于 2021-03-30 14:32:55
回答 1查看 168关注 0票数 0

我想做一些关键字的Elasticsearch索引,比如..。标签。并对关键词进行同义词过滤。

我认为索引关键字有两种方式,首先是make keyword类型。

代码语言:javascript
运行
复制
{
    "settings": {
        "keywordField": {
            "type": "keyword"
        }
    }
}

如果用League of Legends建立一个索引,也许这个。

代码语言:javascript
运行
复制
{
    "keywordField": ["leagueoflegends", "league", "legends", "lol" /* synonym */]
}

text类型:

代码语言:javascript
运行
复制
{
    "settings": {
        "keywordField": {
            "type": "text",
            "analyzer": "lowercase_and_whitespace_and_synonym_analyzer"
        }
    }
}

也许这个。

代码语言:javascript
运行
复制
{
    "keywordField": ["league of legends"](synonym: lol => leagueoflegends)
}

如果将_analyzer api用于此字段,则需要“传奇联盟”、“联盟”、“传奇”。

搜索查询:'lol',‘英雄联盟’,‘英雄联盟’必须匹配这个字段。

哪种练习是最好的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-30 14:50:42

使用索引数据、映射、搜索查询和搜索结果添加一个工作示例。在下面的示例中,我使用了两个同义词lolleagueoflegends

索引映射:

代码语言:javascript
运行
复制
{
  "settings": {
    "index": {
      "analysis": {
        "filter": {
          "synonym_filter": {
            "type": "synonym",
            "synonyms": [
              "leagueoflegends, lol"
            ]
          }
        },
        "analyzer": {
          "synonym_analyzer": {
            "filter": [
              "lowercase",
              "synonym_filter"
            ],
            "tokenizer": "standard"
          }
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "keywordField": {
        "type": "text"
      }
    }
  }
}

索引数据:

代码语言:javascript
运行
复制
{
    "keywordField": ["leagueoflegends", "league", "legends"]
}

搜索查询:

代码语言:javascript
运行
复制
 {
  "query": {
    "match": {
      "keywordField": {
        "query": "lol",
        "analyzer": "synonym_analyzer"
      }
    }
  }
}

搜索结果:

代码语言:javascript
运行
复制
"hits": [
      {
        "_index": "66872989",
        "_type": "_doc",
        "_id": "1",
        "_score": 0.19363807,
        "_source": {
          "keywordField": [
            "leagueoflegends",
            "league",
            "legends"
          ]
        }
      }
    ]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66872989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档