2013-07-17 13 views
6

Come faccio a ottenere la ricerca elastica per risolvere un semplice caso di utilizzo automatico con più parole?query prefisso elasticsearch per più parole per risolvere il caso di utilizzo automatico

Diciamo che ho un documento con il seguente titolo: la ricerca elastica è un ottimo strumento di ricerca costruito su lucene.

Quindi, se io uso la query prefisso e costruirlo con la forma -

{ 
    "prefix" : { "title" : "Elas" } 
} 

Si tornerà quel documento nel set di risultati.

Tuttavia, se faccio una ricerca prefisso per

{ 
    "prefix" : { "title" : "Elastic sea" } 
} 

ottengo alcun risultato.

Quale tipo di query è necessario creare in modo da presentare all'utente il risultato di un semplice caso di utilizzo con completamento automatico.

risposta

2

Per ottenere questo risultato, è necessario utilizzare una query booleana. La parola parziale deve essere una query prefissata e la parola o frase completa deve essere contenuta in una clausola di corrispondenza. Ci sono altre modifiche disponibili alla query, come deve, ecc., Che possono essere applicate secondo necessità.

{ 
    "query": { 
     "bool": { 
      "must": [ 
       { 
        "prefix": { 
         "name": "sea" 
        } 
       }, 
       { 
        "match": { 
         "name": "elastic" 
        } 
       } 
      ] 
     } 
    } 
} 
9

Una query prefisso fatta su Elastic sea sarebbe partita un termine come Elastic search nell'indice, ma che non appare nell'indice se tokenize su spazi bianchi. Quello che hai è elastic e search come due diversi token. Dai uno sguardo allo analyze api per scoprire come stai indicizzando il tuo testo.

Utilizzando una query booleana come nella risposta, non si terrà conto della posizione dei termini. Si otterrebbe come risultato il seguente documento, ad esempio:

modello elastico è un framework per memorizzare il vostro oggetto Moose e cercare attraverso di loro.

Per scopi di completamento automatico, è possibile effettuare una query a frase e utilizzare l'ultimo termine come prefisso. Questo è disponibile out of the box utilizzando il tipo match_phrase_prefix in una match query, che è stato messo a disposizione proprio per il vostro caso d'uso:

{ 
    "match" : { 
     "message" : { 
      "query" : "elastic sea", 
      "type" : "phrase_prefix" 
     } 
    } 
} 

Con questa domanda il documento esempio potrebbe corrispondere, ma il mio non sarebbe dato elastic non è vicino al search Là.

+0

Avrei dovuto chiarire e questo è un mio errore. La posizione dei termini non è importante per me dal momento che sto guardando solo i titoli e non contro l'intera descrizione. La query phrase_prefix non restituirà risultati se ho cercato Elastic Moos nel tuo esempio? – user1796571

+0

No, non lo farò! La query che ho proposto tiene conto della posizione dei termini ed espande solo l'ultimo trattandolo come un prefisso. – javanna

Problemi correlati