是否有一种标准方法可以使用ElasticSearch为小字段(例如地名)实现逐个字符的预先输入自动完成功能。
(在撰写本文时,有很多讨论可以通过搜索获得,但似乎没有什么是明确的。(另外,我看到在Apache Lucene 4中有关于自动完成/建议的功能支持的影响。 ))
感谢您的想法。
答案 0 :(得分:9)
您可以使用基于Edge NGram的分析器,请参阅http://www.elasticsearch.org/guide/reference/index-modules/analysis/edgengram-tokenizer.html
或使用建议插件:https://github.com/spinscale/elasticsearch-suggest-plugin
HTH
答案 1 :(得分:3)
正如大卫所写,你可以使用NGrams或者建议插件。使用lucene 4,可以提供开箱即用的更好的自动建议,而无需保留单独的索引。
现在,您还可以在字段上创建terms facet并使用正则表达式模式仅保留以相关前缀开头的条目:
"facets" : {
"tag" : {
"terms" : {
"field" : "field_name",
"regex" : "prefix.*"
}
}
}
正则表达式只是一个示例,它可以改进,您也可以使用正确的regex flag使其不区分大小写。另外,请注意,除非你有足够的内存,否则在包含许多独特术语的字段上进行制作并不是一个好主意。
答案 2 :(得分:3)
使用自0.90.3版以来可用的内置自动完成建议:
http://www.elastic.co/guide/en/elasticsearch/reference/master/search-suggesters-completion.html
它非常快,并且是针对该用例而开发的。