2012-11-28 82 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 –