2015-05-03 19 views
10

questo dovrebbe essere ovvio per me, ma non lo è. I due partita seguente solo la seconda frase (in questo caso, "Cape Bacino")nell'esecuzione di una query multipla "match-phrase" in Ricerca elastica

"query": { 
    "match_phrase": { 
    "contents": { 
     "query": "St Peter Fm", 
     "query": "Cape Basin" 
    } 
    } 
} 

"query": { 
    "match_phrase": { 
    "contents": { 
     "query": ["St Peter Fm", "Cape Basin"] 
    } 
    } 
} 

mentre i seguenti gracchia con un errore

"query": { 
    "match_phrase": { 
    "contents": { 
     "query": "St Peter Fm" 
    }, 
    "contents": { 
     "query": "Cape Basin" 
    } 
    } 
} 

voglio abbinare tutti i documenti che contengono sia o frasi esattamente come inserite.

Aggiornamento: See aggiornamento immediatamente sopra

risposta

16

La tua prima query non è in realtà un oggetto JSON valido perché si utilizza lo stesso nome del campo per due volte.

È possibile utilizzare un bool must query per abbinare entrambe le frasi:

PUT phrase/doc/1 
{ 
    "text": "St Peter Fm some other text Cape Basin" 
} 
GET phrase/_search 
{ 
    "query": { 
    "bool": { 
     "must": [ 
     {"match_phrase": {"text": "St Peter Fm"}}, 
     {"match_phrase": {"text": "Cape Basin"}} 
     ] 
    } 
} 
} 
+1

Grazie per aver ricordato l'oggetto JSON valido. Sì, è stato un errore da parte mia. Ho chiarito anche la domanda. Grazie per avermi mostrato come eseguire una ricerca "booleana" di tutti i documenti con le due frasi. In realtà, voglio tutti i documenti con una o entrambe le frasi. – punkish

+1

Cambiare 'bool' in' should' sembra fare il trucco. Mille grazie per il suggerimento nella giusta direzione. – punkish

+0

C'è un modo in cui posso fare una match_phrase su più campi con la stessa parola di interrogazione? perché ho usato multi_match in caso di corrispondenza su più campi per la stessa parola di query. quindi chiedendo se c'è qualcosa come multi_match anche per match_phrase .. TIA :) – ASN

Problemi correlati