2011-12-19 11 views
6

Jestem nowy w Elasticsearch. Nie sądzę, że w pełni rozumiem pojęcie zapytań i filtrów. W moim przypadku chcę używać filtrów, ponieważ nie chcę korzystać z funkcji zaawansowanej, takiej jak punktacja.Elasticsearch Zapytanie DSL z instrukcji SQL

Jak przekonwertować następującą instrukcję SQL na zapytanie elasticsearch?

SELECT * FROM advertiser 
WHERE company like '%com%' 
AND sales_rep IN (1,2) 

Co mam tak daleko:

curl -XGET 'localhost:9200/advertisers/advertiser/_search?pretty=true' -d ' 
{ 
    "query" : { 
     "bool" : { 
      "must" : { 
       "wildcard" : { "company" : "*com*" } 
      } 
     } 
    }, 
    "size":1000000 

}' 

Jak mogę dodać lub filtrów na polu sales_rep?

Dzięki

Odpowiedz

2

Dodaj „powinien” klauzula po klauzuli koniecznością. W zapytaniu boolowym jedna lub więcej klauzul powinna być zgodna domyślnie. Właściwie możesz ustawić "minimalny_liczba_dolnych_przesunięć" na dowolną liczbę. Sprawdź numer bool query docs.

Dla twojej sprawy powinno to zadziałać.

Ta sama koncepcja działa w przypadku filtrów bool. Po prostu zmień "zapytanie" na "filtruj". Dokumenty z filtrem boolowym to here.

0

spotykam tego posta 4 lata za późno ...

Tak czy inaczej, być może poniższy kod może być przydatny ...

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "wildcard": { 
      "company": "*com*" 
     } 
     }, 
     "filter": { 
     "bool": { 
      "should": [ 
      { 
       "terms": { 
       "sales_rep_id": [ "1", "2" ] 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
}