2012-11-13 12 views
6

Chciałbym zapytać o dane, że user_id jest '1' i name jest 'John'. Łatwo jest napisać powszechnie używany kod SQL:Jak dołączyć 2 pasujące zapytania do zapytania dotyczącego elastycznego wyszukiwania?

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

Nie jest mi łatwo złożyć zapytanie o elastyczne wyszukiwanie.

Najpierw zrobiłem kwerendę dla user_id:

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

a wyniki były tego się spodziewałem.

Następnie zrobiłem kwerendę dla name:

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

To działa dobrze, też.

Ale nie mogłem utworzyć zapytania łączącego 2 warunki z operacją. Jak mogę dołączyć te dwa pasujące zapytania do jednego użycia i działania?

Odpowiedz

11

Co trzeba to bool query, w którym można umieścić wszystkie swoje pojedyncze zapytania:

(nie mogłem przetestować kwerendę, to może być źle, ale bool-zapytania jest odpowiedź na swój problem)

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

FYI docs zapytań bool zostały przeniesione [tutaj] (http://www.elastic.co/guide/en/elasticsearch/reference/1.4/query-dsl-bool-query.html) –

+0

dziękuję . faceci elasticsearch powinni poważnie dodać przekierowanie do tego – Thorsten

Powiązane problemy