首页 > 解决方案 > 如何使用弹性搜索(6 月 6 日晚上 7 点到 6 月 7 日晚上 7 点)定义日期时间范围以获取特定数据?

问题描述

我通过定义两个时间戳尝试了以下查询,但它获取了空结果。如果我在查询中给出类似 "from": "2021-06-06T19:00:00" 和 "to": "now" 的内容,它会获取结果,我如何定义 "from" 的日期时间范围:" 2021-06-06T19:00:00" 和 "to": "2021-06-07T19:00:00" 使用以下查询?

注意:参考此文档进行日期时间范围查询

POST invoices/_search
{
  "from": 0,
  "size": 50,
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "mdt": {
              "from": "2021-06-06T19:00:00",
              "to": "2021-06-07T19:00:00",
              "include_lower": true,
              "include_upper": true,
              "boost": 1
            }
          }
        }
      ],
      "adjust_pure_negative": true,
      "boost": 1
    }
  },
  "version": true,
  "explain": false
}

标签: elasticsearch

解决方案


很可能您使用的格式与映射不同。默认情况下,Elasticsearch 使用 's 映射中提供的日期格式。此值会覆盖该映射格式。所以我相信如果你将格式添加到范围查询中,你应该得到你期望的结果,所以你的查询应该是这样的:

询问:

POST invoices/_search
{
  "from": 0,
  "size": 50,
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "mdt": {
              "gte": "2021-06-06T19:00:00",
              "lte": "2021-06-07T19:00:00",
              "include_lower": true,
              "include_upper": true,
              "boost": 1,
              "format": "yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ"
            }
          }
        }
      ],
      "adjust_pure_negative": true,
      "boost": 1
    }
  },
  "version": true,
  "explain": false
}

您可以在此处查看 elasticsearch 支持的不同格式类型。


推荐阅读