2012-11-28 56 views
8

是否有一种标准方法可以针对小字段(例如地名)使用ElasticSearch实现逐字符typeahead自动完成功能。 (在写这篇文章的时候,通过搜索可以找到很多讨论,但没有任何东西看起来很明确(另外,我看到有关Apache Lucene 4中自动完成/提示功能支持效果的讨论))使用ElasticSearch支持typeahead自动完成

谢谢你的想法。

回答

3

当大卫写道,你可以使用的n-gram或暗示插件。使用lucene 4,即可实现更好的自动建议,而无需获得单独的索引。

现在你也可以让你的领域terms facet和使用正则表达式模式只保留有关前缀开头的条目:

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

正则表达式仅仅是一个例子,它可以改进后,还可以使用适当的regex flag使其不区分大小写。另外,要注意在一个包含许多独特术语的领域上进行创作并不是一个好主意,除非你有足够的记忆。

3

使用内置的自动完成建议者这是自0.90.3版本可供选择:

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

这是极快的和正是用例开发。

+0

顺便说一句@simon新的完成前缀建议功能不是在0.90.0,而是在0.90.3(仍然认为是实验)。 https://github.com/elasticsearch/elasticsearch/issues/3376 – Ran

+0

True非常快,但与使用mySQL LIKE前缀*或Redis/CouchBase自动完成相同。 –

+0

答案中的链接不再存在。这可能是对新手的帮助! http://www.elastic.co/guide/en/elasticsearch/reference/master/search-suggesters.html –