2014-07-03 15 views
9

Tak więc ElasticSearch ma zapytanie, które pozwala mi podać wiele wartości i zwrócić dokumenty, w których pole X pasuje do dowolnej z tych wartości.Jak wykonać wiele wartości "dopasuj" lub "dopasuj" w ElasticSearch

Ale chcę zrobić to samo z match_phrase - tj. Dokumenty zwracane, w których pole X zawiera dopasowanie nierozróżniające wielkość liter dla spacji. Obecnie robię to za pomocą filtra lub filtru (patrz poniżej). Ale wydaje mi się to bardzo gadatliwym sposobem robienia tego, co chcę, biorąc pod uwagę, że terminy działają już podobnie.

Obecna metoda

Wydaje się absurdalne, że zapytanie szukają pojedynczego pola dla jednego z trzech wartości powinny być długie 33 linie.

{ 
    "query": { 
    "filtered": { 
     "filter": { 
      "or": { 
       "filters": [ 
       { 
        "query": { 
         "match_phrase": { 
          "myField1": "My first search phrase" 
         } 
        } 
       }, 
       { 
        "query": { 
         "match_phrase": { 
          "myField1": "My second search phrase" 
         } 
        } 
       }, 
       { 
        "query": { 
         "match_phrase": { 
          "myField1": "My third search phrase" 
         } 
        } 
       } 
       ] 
      } 
     } 
    } 
    } 
} 

Odpowiedz

3

Query string byłoby pomocne tu coś na tych liniach

{ 
     "query": { 
     "query_string": { 
      "default_field": "myField1", 
      "query": "\"My first search phrase\" OR \"My second search phrase\" OR \"My third search phrase\"" 
     } 
     } 
    }