2012-11-28 32 views
8
ile typeahead otomatik tamamlama desteği

Küçük alanlar için ElasticSearch kullanarak karakter-karakterli otomatik kod tamamlama gerçekleştirmenin standart bir yolu var mı (örneğin, yer adları).ElasticSearch

(Bu yazının yazıldığı sırada, arama yoluyla bir dizi tartışma var, ancak kesin görünen bir şey yok. (Ayrıca, Apache Lucene 4'te otomatik tamamlama/öneri için özellik desteğinin etkisinden bahsedildiğini görüyorum) .)) Düşünceleriniz için teşekkür ederiz. David yazdığı gibi, NGrams kullanabilir veya eklenti önerebilirsiniz https://github.com/spinscale/elasticsearch-suggest-plugin

hth

cevap

9

Sen, Kenar Ngram tabanlı analizörü kullanmak http://www.elasticsearch.org/guide/reference/index-modules/analysis/edgengram-tokenizer.html

bkz Veya önermek eklentisini kullanabilirsiniz. Lucene 4 ile, ayrı bir endeksi idare etmeye gerek kalmadan kutudan daha iyi otomatik önerilere sahip olmak mümkün olacaktır.

Şimdilik ayrıca sadece sizin sahada terms facet yapmak ve ilgili öneki ile başlayan sadece girdileri tutmak için bir normal ifade desenini kullanabilirsiniz:

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

regex sadece bir örnektir, bu iş olabilir Geliştirilmiş ve aynı zamanda uygun regex flag kullanarak büyük/küçük harfe duyarlı hale getirebilirsiniz. Ayrıca, pek çok benzersiz terim içeren bir alanda faset oluşturmanın harika bir fikir olmadığını, bunun için yeterli belleğe sahip olmadığınızı unutmayın.

+0

Basit kullanım örneği NGram: https://gist.github.com/988923 –

3

Kullanım sürümü 0.90.3 beri kullanılabilir yerleşik otomatik tamamlama suggester:

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

Bu blazingly hızlı ve tam olarak bu kullanım durumu için geliştirilmiştir.

+0

BTW @simon yeni tamamlama öneki öneri özelliği 0.90.0 değil, 0.90.3 (ve hala deneysel olarak kabul edilir). https://github.com/elasticsearch/elasticsearch/issues/3376 – Ran

+0

Gerçek çok hızlı, ama mySQL LIKE öneki * veya Redis/CouchBase otomatik tamamlama işlevini kullanmakla aynı şey. –

+0

Yanıttaki bağlantı artık mevcut değil. Bu yeni başlayanlar için bir yardım olabilir! http://www.elastic.co/guide/en/elasticsearch/reference/master/search-suggesters.html –