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