完成建议器是前缀建议器,这意味着它会尝试将您的查询与输入的前几个字符进行匹配。如果要发布的文档与文本“
dog”匹配,则需要指定“ dog”作为输入。
PUT /test_index/item/1{ "test_suggest": { "input": [ "cat dog", "elephant", "dog" ] }}以我的经验,必须指定输入以进行匹配的局限性使得完成建议者的作用不如其他实现前缀匹配的方式有用。为此,我喜欢边缘ngram。我最近写了一篇有关使用ngram的博客文章,您可能会发现有帮助:http : //blog.qbox.io/an-introduction-to-
ngrams-in-elasticsearch
作为一个简单的示例,您可以使用以下映射
PUT /test_index{ "settings": { "analysis": { "filter": { "edge_ngram_filter": { "type": "edge_ngram", "min_gram": 2, "max_gram": 20 } }, "analyzer": { "edge_ngram_analyzer": { "type": "custom", "tokenizer": "standard", "filter": [ "lowercase", "edge_ngram_filter" ] } } } }, "mappings": { "item": { "properties": { "text_field": { "type": "string", "index_analyzer": "edge_ngram_analyzer", "search_analyzer": "standard" } } } }}然后像这样索引文档:
PUT /test_index/item/1{ "text_field": [ "cat dog", "elephant" ]}这些查询中的任何一个都将返回它:
POST /test_index/_search{ "query": { "match": {"text_field": "dog" } }}POST /test_index/_search{ "query": { "match": {"text_field": "ele" } }}POST /test_index/_search{ "query": { "match": {"text_field": "ca" } }}这是全部的代码:
http://sense.qbox.io/gist/4a08fbb6e42c34ff8904badfaaeecc01139f96cf



