【问题标题】:what types are best for elasticsearch "KEYWORDS"(like hashtags) field?什么类型最适合弹性搜索“关键字”(如主题标签)字段?
【发布时间】:2021-03-30 22:50:42
【问题描述】:

我想为某些关键字创建 Elasticsearch 索引,例如.. hashtag。 并为关键字制作同义词过滤器。

我认为索引关键字有两种方法,第一种是keyword类型。

{
    "settings": {
        "keywordField": {
            "type": "keyword"
        }
    }
}

如果使用League of Legends 建立索引 也许是这个。

{
    "keywordField": ["leagueoflegends", "league", "legends", "lol" /* synonym */]
}

text 输入:

{
    "settings": {
        "keywordField": {
            "type": "text",
            "analyzer": "lowercase_and_whitespace_and_synonym_analyzer"
        }
    }
}

也许是这样。

{
    "keywordField": ["league of legends"](synonym: lol => leagueoflegends)
}

如果对该字段使用_analyzer api,则需要“leagueoflegends”、“league”、“legends”

搜索查询:“lol”、“英雄联盟”、“英雄联盟”必须匹配此字段。

哪种做法最好?

【问题讨论】:

    标签: elasticsearch elasticsearch-7 elasticsearch-analyzers


    【解决方案1】:

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

    索引映射:

    {
      "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"
          }
        }
      }
    }
    

    索引数据:

    {
        "keywordField": ["leagueoflegends", "league", "legends"]
    }
    

    搜索查询:

     {
      "query": {
        "match": {
          "keywordField": {
            "query": "lol",
            "analyzer": "synonym_analyzer"
          }
        }
      }
    }
    

    搜索结果:

    "hits": [
          {
            "_index": "66872989",
            "_type": "_doc",
            "_id": "1",
            "_score": 0.19363807,
            "_source": {
              "keywordField": [
                "leagueoflegends",
                "league",
                "legends"
              ]
            }
          }
        ]
    

    【讨论】:

      猜你喜欢
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多