You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Elasticsearch查询获取指定日期区间的深层嵌套字段数据?

如何查询Elasticsearch中发布日期在指定区间的嵌套字段记录?

需求:查询索引my-books-index-1中,所有发布日期在5月25日至5月31日之间的记录。

索引映射

GET my-books-index-1/_mapping
{
  "my-books-index-1": {
    "mappings": {
      "properties": {
        "book": {
          "properties": {
            "bookInfo": {
              "properties": {
                "publisherInfo": {
                  "type": "nested",
                  "properties": {
                    "publication": {
                      "properties": {
                        "publishedOn": {
                          "type": "date"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

样本记录

"_source": {
  "book": {
    "name": "Harry Potter",
    "bookInfo": {
      "author": "J.K. Rowling",
      "publisherInfo": [
        {
          "price": "100",
          "publication": {
            "publishedOn": 1685268404000 // [Sunday, May 28, 2023 10:06:44 AM]
          }
        }
      ]
    }
  }
}

解决方案

由于publisherInfo是nested类型,必须使用nested查询来正确检索嵌套字段中的数据。以下是符合需求的查询语句:

GET my-books-index-1/_search
{
  "query": {
    "nested": {
      "path": "book.bookInfo.publisherInfo",
      "query": {
        "range": {
          "book.bookInfo.publisherInfo.publication.publishedOn": {
            "gte": "2023-05-25",
            "lt": "2023-06-01",
            "format": "yyyy-MM-dd"
          }
        }
      },
      "inner_hits": {} // 可选,返回匹配的嵌套文档详情
    }
  }
}

关键说明

  • nested查询的path参数指定嵌套字段的完整路径:book.bookInfo.publisherInfo
  • range查询中,使用gte(大于等于)和lt(小于)来覆盖5月25日00:00到5月31日23:59的所有时间点(用2023-06-01作为上限,避免遗漏5月31日的晚时段数据)
  • format参数指定日期格式,Elasticsearch也可自动识别符合ISO标准的日期字符串
  • 若需要在返回结果中看到具体匹配的嵌套项,添加inner_hits字段即可

内容的提问来源于stack exchange,提问作者Sambit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:53:28