elasticsearch搜索空字段

uxhixvfz  于 2021-06-13  发布在  ElasticSearch
关注(0)|答案(1)|浏览(417)

我在ElasticSearch索引中添加了一个新的嵌套对象字段。我想用一些默认值来更新字段,比如[{“key”:“xyz”,“value”:“val1”}]。我试图查询字段值为空或null的索引,但没有成功。
我试过这个

"bool": {
            "must_not": {
              "exists": {
                "field": "PropertyFields"
              }
            }
          }

样本数据
[{“id”:1,“subjectpropertyfields”:[{“value”:“xyz”,“key”:“zzz”}]},{“id”:2},{“id”:3}]
我想查询ids 2,3

j7dteeu8

j7dteeu81#

如果要查找缺少嵌套对象字段的文档,可以使用 must_not 带有exists查询的布尔查询。
添加索引数据、Map、搜索查询和搜索结果的工作示例
索引Map:

{
  "mappings": {
    "properties": {
      "subjectPropertyFields": {
        "type": "nested"
      }
    }
  }
}

索引数据:

{
    "Id": 1,
    "subjectPropertyFields": [
      {
        "value": "xyz",
        "key": "zzz"
      }
    ]
  }
  {
    "Id": 2
  }
  {
    "Id": 3
  }

搜索查询:

{
  "query": {
    "bool": {
      "must_not": [
        {
          "nested": {
            "path": "subjectPropertyFields",
            "query": {
              "bool": {
                "filter": {
                  "exists": {
                    "field": "subjectPropertyFields"
                  }
                }
              }
            }
          }
        }
      ]
    }
  }
}

搜索结果:

"hits": [
      {
        "_index": "65047473",
        "_type": "_doc",
        "_id": "2",
        "_score": 0.0,
        "_source": {
          "Id": 2
        }
      },
      {
        "_index": "65047473",
        "_type": "_doc",
        "_id": "3",
        "_score": 0.0,
        "_source": {
          "Id": 3
        }
      }
    ]

相关问题