2011-12-19 2 views
6

Sono nuovo di Elasticsearch. Non penso di comprendere appieno il concetto di query e filtri. Nel mio caso voglio solo usare i filtri perché non voglio usare funzionalità avanzate come il punteggio.Query DSL Elasticsearch da un'istruzione SQL

Come convertire la seguente istruzione SQL nella query elasticsearch?

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

Quello che ho finora:

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

}' 

Come aggiungo il OR filtri sul campo RAPPRES?

Grazie

risposta

2

Aggiungere un "dovrebbe" clausola dopo la vostra clausola must. In una query bool, una o più clausole devono corrispondere per impostazione predefinita. In realtà, puoi impostare "minimum_number_should_match" come qualsiasi numero, controlla lo bool query docs.

Per il tuo caso, questo dovrebbe funzionare.

"should" : [ 
     { 
      "term" : { "sales_rep_id" : "1" } 
     }, 
     { 
      "term" : { "sales_rep_id" : "2" } 
     } 
    ], 

Lo stesso concetto funziona per i filtri bool. Basta cambiare "query" in "filtro". I documenti del filtro bool sono here.

0

io vengo in questo post 4 anni di ritardo ...

In ogni modo, forse il seguente codice potrebbe essere utile ...

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