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