使用ElasticSearch支持预先输入自动完成功能

时间:2012-11-28 20:58:47

标签: autocomplete elasticsearch typeahead

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

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

感谢您的想法。

3 个答案:

答案 0 :(得分:9)

答案 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

它非常快,并且是针对该用例而开发的。