2014-09-29 24 views
10

Jak wyszukać tekst i filtrować? Chcę wyszukać tekst w dokumentach z language_id = 10. Próbowałem go w ten sposób:Używanie filtru obok query_string w Elastic Search

{ 
    "query": { 
    "query_string": { 
     "query": "Declared" 
    }, 
    { 
     "filtered": { 
     "filter": { 
      "term": { 
      "language_id": 10 
      } 
     } 
     } 
    } 
    } 
} 

, ale wygląda na to, że nie jest poprawny. jak to poprawić?

Odpowiedz

12

Tak, składnia przefiltrowanego zapytania jest nieco uciążliwa. AFAIK powinien wyglądać tak:

{ 
    "query":{ 
     "filtered":{ 
     "query":{ 
      "query_string":{ 
       "query":"Declared" 
      } 
     }, 
     "filter":{ 
      "term":{ 
       "language_id":10 
      } 
     } 
     } 
    } 
} 
+0

Próbowałem format, ale to nie działa, filtry pracują lepiej w formacie @ odpowiedź Kevina. Proszę spojrzeć na to – minocha

+0

Ah, który był literówką, naprawiony – Ashalynd

3

Przepraszamy Ashalynd, ale filtr nie jest właściwym miejscem w twojej odpowiedzi.

To działa lepiej:

{ 
    "query":{ 
     "filtered":{ 
     "query":{ 
      "query_string":{ 
       "query":"Declared" 
      } 
     }, 
     "filter":{ 
      "term":{ 
       "language_id":10 
      } 
     } 
     } 
    } 
} 
+0

to jest to, co działa, a nie wspomniane przez @Ashalynd .. Było wielkie dzięki pomocy! – minocha

5

W wersji 5.2, filtrowane zapytania otrzymuje zapytania bool i zwraca błąd na moim Elastic 5,2 instancji. Zobacz here.

Nowa składnia jest następująca:

{ 
    "query":{ 
     "bool":{ 
     "must":{ 
      "query_string":{ 
       "query":"...query..." 
      } 
     }, 
     "filter":{ 
      "term":{ 
       "language_id":10 
      } 
     } 
     } 
    } 
} 
Powiązane problemy