首页 > 解决方案 > 如何查询具有精确字段 1 匹配和非空字段 2 匹配的弹性搜索文档

问题描述

我在弹性搜索中有文档,field1映射到一个整数值并field2映射到一个数组。我想创建一个查询来查找所有包含field1 == 100且不field2为空的文档。

我该如何编写这样的查询?

标签: elasticsearch

解决方案


使用term 查询匹配field1100并使用exists 查询检查是否field2存在(非空)。上述两个条件都是 AND,因此将它们包装在bool querymust的子句中。

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "field1": 100
          }
        },
        {
          "exists": {
            "field": "field2"
          }
        }
      ]
    }
  }
}

根据@Val 的评论更新:

{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "field1": 100
          }
        },
        {
          "exists": {
            "field": "field2"
          }
        }
      ]
    }
  }
}

推荐阅读