2016-04-03 14 views
6

Chcę stworzyć równowartość następującej kwerendzie -Jak połączyć wiele zapytań bool w elasticsearch

(city = 'New York' AND state = 'NY') AND ((businessName='Java' and businessName='Shop') OR (category='Java' and category = 'Shop')) 

Próbowałem różnych kombinacji zapytań bool użyciem moszczu i powinno ale nic nie wydaje się działać. Czy można to zrobić?

+0

co nie działa - można rozwinąć? – Sanj

+0

Nie jestem w stanie wymyślić prawidłowej składni. Zawsze otrzymuj wyjątek od parsowania. – user1935449

Odpowiedz

7

Jak o coś takiego:

{ 
    "query": { 
     "match_all": {} 
    }, 
    "filter": { 
     "bool": { 
      "must": [ 
       { 
        "term": { 
         "city": "New york" 
        } 
       }, 
       { 
        "term": { 
         "state": "NY" 
        } 
       }, 
       { 
        "bool": { 
         "should": [ 
          { 
           "bool": { 
            "must": [ 
             { 
              "term": { 
               "businessName": "Java" 
              } 
             }, 
             { 
              "term": { 
               "businessName": "Shop" 
              } 
             } 
            ] 
           } 
          }, 
          { 
           "bool": { 
            "must": [ 
             { 
              "term": { 
               "category": "Java" 
              } 
             }, 
             { 
              "term": { 
               "category": "Shop" 
              } 
             } 
            ] 
           } 
          } 
         ] 
        } 
       } 
      ] 
     } 
    } 
}