Запрос 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" ]
}
}
]
}
}
}
}
}