2012-11-13 14 views
6

Vorrei interrogare per i dati che user_id è '1' e name è 'John'. E 'facile scrivere uno SQL comunemente usato:Come unire 2 query di corrispondenza in una query per elasticsearch?

select * from t where user_id = '1' and name = 'John'; 

Ma non è facile per me fare una query per elasticsearch.

In primo luogo, ho fatto una query per user_id:

{ 
    "query" : { 
    "match" : { 
     "user_id" : "1" 
    } 
    } 
} 

ei risultati sono stati quello che mi aspettavo.

Poi, ho fatto una query per name:

{ 
    "query" : { 
    "match" : { 
     "name" : "John" 
    } 
    } 
} 

ha funzionato bene, anche.

Ma non è stato possibile effettuare una query che unisse 2 condizioni e operazione. Come posso unirmi a queste 2 domande di corrispondenza in un unico utilizzo e operazione?

risposta

11

Quello che vi serve è un bool query in cui mettere tutte le singole domande:

(non ho potuto testare la query, potrebbe essere sbagliata, ma il bool-query è la risposta al vostro problema)

{ 
    "bool" : { 
     "must" : [{ 
      "match" : { 
       "user_id" : "1" 
      }, 
      "match" : { 
       "name" : "John" 
      } 
     }] 
    } 
} 
+0

FYI la documentazione di query bool si sono trasferiti [qui] (http://www.elastic.co/guide/en/elasticsearch/reference/1.4/query-dsl-bool-query.html) –

+0

grazie . i ragazzi di elasticsearch dovrebbero seriamente aggiungere un reindirizzamento per questo – Thorsten

Problemi correlati