9

是否有一种标准方法可以使用 ElasticSearch 对小字段(例如地名)实现逐个字符的预输入自动完成。

(在写这篇文章的时候,有很多可以通过搜索获得的讨论,但似乎没有什么是确定的。(另外,我看到有关于 Apache Lucene 4 中自动完成/建议功能支持的效果的讨论。))

谢谢你的想法。

4

3 回答 3

9

您可以使用基于 Edge NGram 的分析器,请参阅http://www.elasticsearch.org/guide/reference/index-modules/analysis/edgengram-tokenizer.html

或者使用建议插件:https ://github.com/spinscale/elasticsearch-suggest-plugin

高温高压

于 2012-11-28T21:33:34.233 回答
3

正如大卫所写,您可以使用 NGrams 或建议插件。使用 lucene 4,可以有更好的开箱即用的自动建议,而无需维护单独的索引。

现在,您还可以在您的字段上创建一个术语方面,并使用正则表达式模式来仅保留以相关前缀开头的条目:

"facets" : {
    "tag" : {
        "terms" : {
            "field" : "field_name",
            "regex" : "prefix.*"
        }
    }
}

正则表达式只是一个示例,它可以改进,您也可以使用正确的正则表达式标志使其不区分大小写。此外,请注意,在包含许多独特术语的字段上进行刻面并不是一个好主意,除非您有足够的内存。

于 2012-11-29T09:24:37.333 回答
3

使用自 0.90.3 版以来可用的内置自动完成提示器:

http://www.elastic.co/guide/en/elasticsearch/reference/master/search-suggesters-completion.html

它速度极快,专为该用例而开发。

于 2013-09-05T22:06:57.357 回答