ElasticSearch:ElasticSearch中的IN等效运算符

Sam*_*ukh 48 elasticsearch

我试图在SQL中找到等效于IN\的ElasticSearch查询NOT.

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

有人可以分享这个例子吗?

pic*_*ypg 77

类似于Chris建议的评论,类似的替换INterms 过滤器(查询意味着评分,这可能会改善返回的顺序).

SELECT * FROM table WHERE id IN (1, 2, 3);
Run Code Online (Sandbox Code Playgroud)

等效的Elasticsearch 1.x过滤器将是:

{
  "query" : {
    "filtered" : {
      "filter" : {
        "terms" : {
          "id" : [1, 2, 3]
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

等效的Elasticsearch 2.x +过滤器将是:

{
  "query" : {
    "bool" : {
      "filter" : {
        "terms" : {
          "id" : [1, 2, 3]
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

重要的一点是,terms过滤器(以及对此问题的查询)适用于完全匹配.这是一个隐含的or操作,类似于IN.

如果你想反转它,你可以使用not过滤器,但我建议使用稍微更详细bool/ must_not过滤器(以养成使用bool/ must和的习惯bool).

{
  "query" : {
    "bool" : {
      "must_not" : {
        "terms" : {
          "id" : [1, 2, 3]
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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


nir*_*ale 6

1

您可以在 ElasticSearch 中使用术语术语查询,该查询将充当 IN

terms 查询用于检查该值是否与以下提供的任何值匹配Array中提供的任何值匹配。

2 不得

在 ElasticSearch 中, must_not可以用作 NOT。

前任。

GET my_index/my_type/_search
{
    "query" : {
         "bool" : {
              "must":[
                {
                   "terms": {
                        "id" : ["1234","12345","123456"]
                    }
                },
                {
                   "bool" : {
                        "must_not" : [
                            {
                              "match":{
                                  "id" : "123"
                               }
                            }
                        ]
                    }
                }
              ]
         }
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 存在

另外,如果有帮助,您还可以使用“存在”查询来检查该字段是否存在。例如,检查该字段是否存在

"exists" : {
      "field" : "mobileNumber"
   }
Run Code Online (Sandbox Code Playgroud)

检查字段是否不存在

"bool":{
    "must_not" : [
        {
           "exists" : {
               "field" : "mobileNumber"
           }
        }
     ]
}
Run Code Online (Sandbox Code Playgroud)