Elasticsearch DSL-запрос из оператора SQL - PullRequest
6 голосов
/ 19 декабря 2011

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

Как мне преобразовать следующий оператор SQL в запрос эластичного поиска?

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 ]

2 голосов
/ 19 декабря 2011

Добавьте предложение «следует» после вашего предложения.В запросе bool одно или несколько предложений must должны совпадать по умолчанию.На самом деле, вы можете установить для «minimal_number_should_match» любое число. Проверьте документы bool .

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

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

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

0 голосов
/ 01 марта 2016

Я сталкиваюсь с этим постом на 4 года позже ...

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

{
  "query": {
    "filtered": {
      "query": {
        "wildcard": {
          "company": "*com*"
        }
      },
      "filter": {
        "bool": {
          "should": [
            {
              "terms": {
                "sales_rep_id": [ "1", "2" ]
              }
            }
          ]
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...