elasticsearch,elastica,Php,elasticsearch,Elastica" /> elasticsearch,elastica,Php,elasticsearch,Elastica" />

弹性搜索/Elasica php-或对包含NULL的字段的查询不起作用

弹性搜索/Elasica php-或对包含NULL的字段的查询不起作用,php,elasticsearch,elastica,Php,elasticsearch,Elastica,如何仅查询location\u id为null或locations.country\u id位于给定id集中的文档?这是当前的查询,但它根本没有返回任何信息。。。如果我从查询中删除location_id,它将工作并返回至少与国家id匹配的文档 { "bool":{ "must":[ { "bool":{ "must_not":[ {

如何仅查询location\u id为null或locations.country\u id位于给定id集中的文档?这是当前的查询,但它根本没有返回任何信息。。。如果我从查询中删除location_id,它将工作并返回至少与国家id匹配的文档

{
   "bool":{
      "must":[
         {
            "bool":{
               "must_not":[
                  {
                     "exists":{
                        "field":"location_id"
                     }
                  }
               ],
               "must":[
                  {
                     "terms":{
                        "locations.country_id":[
                           18
                        ]
                     }
                  }
               ]
            }
         }
      ]
   }
}

在elasticsearch中,其行为必须和应该与或类似 您的查询转换为locationId为null,locations.country_id位于[set of id]中。 “必须”需要替换为“应该”

查询:


在elasticsearch中,其行为必须和应该与或类似 您的查询转换为locationId为null,locations.country_id位于[set of id]中。 “必须”需要替换为“应该”

查询:


无论出于何种原因,这都会导致获取所有类型的文档,不再由国家过滤。这是我做出您建议的更改后的整个查询。@burzum请在“应”之后添加“最小值应匹配”:1。当必须使用时,不过滤任何文档,它只影响评分。添加“minimum_should_match”:1将强制文档与should@burzum我的shoul子句和你的quey中的shoul子句是不同的。在我的shoul子句中有两个独立的子句[{bool},{term}],在你的查询中它已经组合在一起[{bool:{mustnot,term}]对不起,要再试一次,这个巨大的嵌套json让人读起来很痛苦。这导致无论出于何种原因,都会得到各种各样的文档,不再由国家过滤。这是我做出您建议的更改后的整个查询。@burzum请在“应”之后添加“最小值应匹配”:1。当必须使用时,不过滤任何文档,它只影响评分。添加“minimum_should_match”:1将强制文档与should@burzum我的shoul子句和你的quey中的shoul子句是不同的。在我的shoul子句中有两个独立的子句[{bool},{term}],在你的查询中它已经组合在一起[{bool:{mustnot,term}]对不起,要再试一次,这种巨大的嵌套json让人读起来很痛苦。
{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must_not": [
              {
                "exists": {
                  "field": "location_id"
                }
              }
            ]
          }
        },
        {
          "terms": {
            "locations.country_id": [
              18
            ]
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}