3个字母后的弹性搜索中的自动建议

时间:2017-08-01 21:30:36

标签: elasticsearch

我有一个搜索查询,在输入完整的单词后进行基本搜索。我正在寻找3个字母后的自动建议。 例如, 标题 - 三星galaxy s4 我希望在“sam”之后看到自动建议,而不是完整的单词“samsung”。

2 个答案:

答案 0 :(得分:2)

当ngram过滤器工作时,有一个专用的建议用于此用例,称为completion建议器,它使用内部的另一个数据结构,这将允许您执行毫秒范围内的建议,因此比常规查询使用edgengram快得多。查看此处的文档

https://www.elastic.co/guide/en/elasticsearch/reference/5.5/search-suggesters-completion.html

答案 1 :(得分:0)

您需要使用edgeNGram过滤器。

{
  "analysis": {
    "tokenizer": {
        "autocomplete_tokenizer": {
            "type": "edgeNGram",
            "min_gram": "3",
            "max_gram": "20"
        }
    },
    "analyzer": {
        "autocomplete_edge_ngram": {
            "filter": ["lowercase"],
            "type": "custom",
            "tokenizer": "autocomplete_tokenizer"
        }
    }
  }
}

并且映射将是

{
     "title_edge_ngram": {
        "type": "text",
        "analyzer": "autocomplete_edge_ngram",
        "search_analyzer": "standard"
    }

或者您可以在elasticsearch中使用completion suggester。 对于三个字符检查,您必须在客户端本身进行。