2012-03-13 11 views
5

A mieć ciąg, powiedzmy "AB CD"Jak szukać w wielu dziedzinach z lub oświadczenie w ElasticSearch

mam dokumenty z dziedzin: [ 'a', 'b', 'c', ' d ', ...' z '] (nie wszystkie dokumenty mają wszystkie pola)

Chcę wyszukać tylko w polach "a", "c", "f", "x", ale chcę zwrócić wszystkie pola w dokumencie.

Udane trafienie, jeśli DOWOLNE z pól "a", "c", "f", "x" zawiera ciąg rozpoczynający się "Ab" lub "Cd".

Teraz używam tego, ale wyszukuje w WSZYSTKICH polach, nie w wybranych.

{'query': {'query_string': {'query': "Ab* Cd*"}}} 

Odpowiedz

14

To możliwe listę pól, które chcesz wyszukać domyślnie jako część zapytania określić:

{ 
    "query": { 
     "query_string" : { 
      "fields" : ["a", "c", "f", "x"], 
      "query" : "Ab* Cd*" 
     } 
    } 
} 

Można prefiks każdy termin z nazwą pola:

{'query': {'query_string': {'query': "a:Ab* c:Ab* f:Ab* x:Ab* a:Cd* c:Cd* f:Cd* x:Cd*"}}} 

Sprawdź stronę o elastycznym wyglądzie na stronie Query String Query, opisującą te i inne przydatne opcje.

+0

Dzięki, to rozwiązuje problem. –

4

To jest dokładnie to, czego szukałem. W przypadku, gdy ktoś szuka wersji java to:

QueryStringQueryBuilder qsqb = new QueryStringQueryBuilder("Ab* Cd*") 
      .field("a", 2) 
      .field("b") 
      .field("c") 
      .field("f") 
      .field("x"); 

Można nawet użyć poziomu polowego przypominania, jeśli chcesz jak pokazuje na polu „a” w powyższym kodzie.

Powiązane problemy