首页 > 解决方案 > Elasticsearch Completion Suggester:真正的标记化可能吗?

问题描述

here所述,Elasticsearch中的一个字段,定义为“完成”类型以及某个分析器+标记器,首先根据这些部分的底层逻辑进行拆分,然后再次“缝合”在一起。但是我对这种行为非常不满意。

这是我当前的映射设置(摘录):

"mappings": {
    "movie": {
      "properties": {
        "title": {
          "analyzer": "standard",
          "fields": {
            "autocomplete": {
              "type": "completion"
              "analyzer": "whitespace",
            }
          },
          "type": "string"
        }
      }
    }
}

让我们以一部电影Harry Potter为例:

当我输入前缀时,Har我得到了建议Harry Potter。相反,当我输入时Pot,我根本没有得到任何结果,因为各个标记在分析/标记化后立即HarryPotter缝合在一起。Harry Potter

现在我想要的是以下行为:当我输入时Pot,我希望 Completion Suggester 返回Potter。不是Harry Potter,只是简单Potter。这有可能吗?警告:我什至不需要对创建建议的文档的引用。因此,如果有可能以某种方式将所有生成的令牌放入一个容器中,然后从那里检索建议,那将是非常棒的(由于我必须做一些其他的事情)。

标签: elasticsearchsearchautocomplete

解决方案


我正在使用 edge_ngram 标记器做一些非常相似的事情。这是官方文档

您的设置需要包括以下内容:

{
  "settings" : {
    "index" : {
      "number_of_shards" : "5",
      "analysis" : {
        "analyzer" : {
          "autocomplete": {
            "type": "custom",
            "tokenizer": "autocomplete",
            "filter": [
                "lowercase"
            ]
          }
        },
        "tokenizer": {
          "autocomplete": {
            "type": "edge_ngram",
            "min_gram": 3,
            "max_gram": 20,
            "token_chars": [
              "letter",
              "digit"
            ]
          }
        }
      }
    }
  }
}

并且您的映射需要改进,以便“分析器”:“自动完成”


推荐阅读