Запрос DSL Elasticsearch из инструкции SQL

Я новичок в Elasticsearch. Я не думаю, что полностью понимаю концепцию запросов и фильтров. В моем случае я просто хочу использовать фильтры, поскольку я не хочу использовать функцию advance, такую как scoring.

Как преобразовать следующий оператор SQL в запрос elasticsearch?

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

что у меня до сих пор:

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

}' 

Как добавить фильтры OR в поле sales_rep?

спасибо

2 ответов


добавьте предложение "should" после предложения must. В запросе bool одно или несколько предложений should должны совпадать по умолчанию. Фактически, вы можете установить "minimum_number_should_match" как любое число, Проверьте bool query docs.

для вашего случая это должно работать.

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

та же концепция работает для фильтров типа bool. Просто измените "запрос"на " фильтр". Документы фильтра bool являются здесь.


я сталкиваюсь с этим сообщением 4 года слишком поздно...

в любом случае, возможно, следующий код может быть полезен...

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