2012-11-28 19 views
8

Esiste un modo standard per implementare il completamento automatico di tipo carattere per carattere con ElasticSearch per i campi di dimensioni ridotte (ad esempio i nomi dei luoghi).Supporta completamento automatico typeahead con ElasticSearch

(Al momento della stesura di questo, ci sono un certo numero di discussioni disponibili tramite ricerca, ma nulla che sembra definitivo. (Inoltre, vedo che si parla dell'effetto del supporto di funzionalità per il completamento automatico/suggerimento in Apache Lucene 4 .))

Grazie per i pensieri.

risposta

3

Come David ha scritto, è possibile utilizzare il plugin NGrams o suggerire. Con lucene 4 sarà possibile avere migliori suggerimenti automatici prontamente, senza la necessità di mantenere un indice separato.

Per ora si può anche solo fare un terms facet sul campo e utilizzare un modello di espressione regolare per mantenere solo le voci che iniziano con il prefisso rilevanti:

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

L'espressione regolare è solo un esempio, si può migliorato e puoi anche renderlo case insensitive usando l'appropriato regex flag. Inoltre, fai attenzione che creare un aspetto su un campo che contiene molti termini univoci non è una grande idea, a meno che tu non abbia abbastanza memoria per questo.

3

Utilizzare il suggester completamento automatico incorporato che è disponibile a partire dalla versione 0.90.3:

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

E 'incredibilmente veloce ed è stato sviluppato proprio per questo caso d'uso.

+0

BTW @simon la nuova funzione di suggerimento del prefisso di completamento non è a 0.90.0 ma in 0.90.3 (e ancora considerata sperimentale). https://github.com/elasticsearch/elasticsearch/issues/3376 – Ran

+0

True è molto veloce, ma è la stessa cosa che usare il prefisso LIKE mySQL LIKE o il completamento automatico Redis/CouchBase. –

+0

Il link nella risposta non esiste più. Questo può essere un aiuto per i principianti! http://www.elastic.co/guide/en/elasticsearch/reference/master/search-suggesters.html –

Problemi correlati