ElasticSearch: 在 ElasticSearch 中的 IN 等效运算符

我试图在 SQL 中找到相当于 IN NOT的 ElasticSearch 查询。

我知道我们可以使用带有多个 OR 的 QueryString 查询来获得相同的答案,但是最终会得到大量的 OR。

有人能分享一下这个例子吗?

57931 次浏览

与 Chris 建议的注释类似,IN的类似替代品是 terms < em > filter (查询意味着得分,这可能会改善返回的顺序)。

SELECT * FROM table WHERE id IN (1, 2, 3);

相应的 Elasticsearch 1.x 过滤器应该是:

{
"query" : {
"filtered" : {
"filter" : {
"terms" : {
"id" : [1, 2, 3]
}
}
}
}
}

相应的 Elasticsearch2.x + 过滤器应该是:

{
"query" : {
"bool" : {
"filter" : {
"terms" : {
"id" : [1, 2, 3]
}
}
}
}
}

重要的一点是,terms过滤器(以及相关的查询)可以处理精确匹配。它是一个隐式的 or操作,类似于 IN

如果你想反转它,你可以使用 not 过滤器,但我建议使用稍微详细一点的 bool/must_not过滤器(为了养成使用 bool/mustbool的习惯)。

{
"query" : {
"bool" : {
"must_not" : {
"terms" : {
"id" : [1, 2, 3]
}
}
}
}
}

总的来说,bool复合查询语法是 Elasticsearch 最重要的过滤器之一term(单数)和 terms过滤器(复数,如图所示)也是如此。

我看到你要的东西了。 我编写的源代码如下。

我希望这能帮你解决问题。

Sql 查询:

select * from tablename where fieldname in ('AA','BB');

弹性搜寻:

{
query :{
bool:{
must:[{
"script": {
"script":{
"inline": "(doc['fieldname'].value.toString().substring(0,2).toUpperCase() in ['AA','BB']) == true"
}
}
}],
should:[],
must_not:[]
}
}
}

1 条款

可以在 ElasticSearch 中使用作为 IN 的 条款术语查询

词汇查询用于检查该值是否与来自 数组的任何提供的值匹配。

2 不可以

Must _ NOT 可以在 ElasticSearch 中用作 NOT。

前男友。

GET my_index/my_type/_search
{
"query" : {
"bool" : {
"must":[
{
"terms": {
"id" : ["1234","12345","123456"]
}
},
{
"bool" : {
"must_not" : [
{
"match":{
"id" : "123"
}
}
]
}
}
]
}
}
}
  1. 存在

如果有帮助的话,你也可以使用 “存在”查询来检查字段是否存在。 为了前妻, 检查字段是否存在

"exists" : {
"field" : "mobileNumber"
}

检查字段是否不存在

"bool":{
"must_not" : [
{
"exists" : {
"field" : "mobileNumber"
}
}
]
}