2015-05-07 16 views
32

Próbuję znaleźć kwerendę ElasticSearch równoważną IN \ NOT w SQL.ElasticSearch: Równoważny operator w ElasticSearch

Wiem, że możemy użyć kwerendy QueryString z wieloma OR, aby uzyskać tę samą odpowiedź, ale to kończy się z dużą ilością OR.

Czy ktoś może udostępnić przykład?

+0

http://www.elastic.co/guide/en/elasticsearch/reference/1.5/query-dsl-terms-query.html –

Odpowiedz

42

Podobny do tego, co Chris zasugerował jako komentarz, analogicznym zamiennikiem dla IN jest termsfilter (zapytania oznaczają punktację, która może poprawić zwrócone zamówienie).

SELECT * FROM table WHERE id IN (1, 2, 3); 

Równoważnik filtr 1.x Elasticsearch to:

{ 
    "query" : { 
    "filtered" : { 
     "filter" : { 
     "terms" : { 
      "id" : [1, 2, 3] 
     } 
     } 
    } 
    } 
} 

Równoważnik 2.x Elasticsearch z filtrem może być:

{ 
    "query" : { 
    "bool" : { 
     "filter" : { 
     "terms" : { 
      "id" : [1, 2, 3] 
     } 
     } 
    } 
    } 
} 

wynos Ważne jest to, że filtr terms (i zapytanie o tę sprawę) działają na dokładne dopasowania. Jest to domyślnie operacja or, podobna do IN.

Jeśli chciał go odwrócić, można użyć nie filtrować, ale proponuję użyć nieco bardziej rozwlekły bool/must_not filtr (dostać w zwyczaju również używając bool/must i bool).

{ 
    "query" : { 
    "bool" : { 
     "must_not" : { 
     "terms" : { 
      "id" : [1, 2, 3] 
     } 
     } 
    } 
    } 
} 

Ogólnie składni zapytania bool związek jest , podobnie jak term (pojedyncze) i terms filtry (mnogiej, jak pokazano).

+1

Dzięki! To zadziałało dla mnie! –

+0

10/10 odpowiedź. Prosto i prosto do rzeczy. – Watercolours