Ответ 1
Подобно тому, что Крис предложил в качестве комментария, аналогичной заменой для IN
является terms
filter (запросы подразумевают подсчет очков, что может улучшить возвращенный заказ).
SELECT * FROM table WHERE id IN (1, 2, 3);
Эквивалентным фильтром Elasticsearch 1.x будет:
{
"query" : {
"filtered" : {
"filter" : {
"terms" : {
"id" : [1, 2, 3]
}
}
}
}
}
Эквивалентным фильтром Elasticsearch 2.x + будет:
{
"query" : {
"bool" : {
"filter" : {
"terms" : {
"id" : [1, 2, 3]
}
}
}
}
}
Важным выводом является то, что фильтр terms
(и запрос на этот счет) работает с точными совпадениями. Это неявно операция or
, аналогичная IN
.
Если вы хотите инвертировать его, вы можете использовать фильтр not, но я бы предложил использовать немного более подробный bool
/must_not
фильтр (чтобы привыкнуть также использовать bool
/must
и bool
).
{
"query" : {
"bool" : {
"must_not" : {
"terms" : {
"id" : [1, 2, 3]
}
}
}
}
}
В целом синтаксис bool
составного запроса один из самых важных фильтров в Elasticsearch, равно как и term
(единственное) и terms
(множественное число, как показано).