ElasticSearch:ElasticSearch中的IN等效运算符
我试图在SQL中找到与IN
\ 等效的ElasticSearch查询NOT
。
我知道我们可以使用带有多个OR的QueryString查询来获得相同的答案,但这最终导致很多OR。
谁能分享这个例子?
回答:
与克里斯建议的评论类似,类似的替换IN
是terms
过滤器 (查询暗示得分,这可能会改善返回的订单)。
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
过滤器(复数)也是如此。
以上是 ElasticSearch:ElasticSearch中的IN等效运算符 的全部内容, 来源链接: utcz.com/qa/418426.html