【问题标题】:Elasticsearch - Trouble querying for exact date with range queryElasticsearch - 使用范围查询查询确切日期时遇到问题
【发布时间】:2020-12-15 19:39:36
【问题描述】:

我的事件索引中有以下映射定义:

{
  "events": {
    "mappings": {
      "properties": {
        "data": {
          "properties": {
            "reportDate": {
              "type": "date",
              "format": "M/d/YYYY"
            }
         }
       }
    }
  }
}

还有一个示例文档:

{
    "_index": "events",
    "_type": "_doc",
    "_id": "12345",
    "_version": 1,
    "_seq_no": 90,
    "_primary_term": 1,
    "found": true,
    "_source": {
        "data": {
            "reportDate": "12/4/2018",
        }
    }
}

我的目标是查询确切 data.reportDate 为 12/4/2018 的文档,但是当我运行此查询时:

{
    "query": {
        "range": {
            "data.reportDate": {
                "lte": "12/4/2018",
                "gte": "12/4/2018",
                "format": "M/d/YYYY"
            }
        }
    }
}

我改为获取所有具有 2018 年 data.reportDate 的文档,而不仅仅是 2018 年 12 月 4 日。我尝试设置与 CONTAINS 和 WITHIN 的关系,但没有成功。有什么想法吗?

【问题讨论】:

    标签: elasticsearch elasticsearch-dsl


    【解决方案1】:

    您需要将日期格式从 M/d/YYYY 更改为 M/d/yyyy。请参阅此ES official documentation 以了解有关日期格式的更多信息。你甚至可以参考这个documentation来了解yyyyYYYY之间的区别

    yyyy 指定日历年,而 YYYY 指定年份( “一年中的一周”)

    添加一个包含索引映射、数据、搜索查询和搜索结果的工作示例

    索引映射:

    {
      "mappings": {
        "properties": {
          "data": {
            "properties": {
              "reportDate": {
                "type": "date",
                "format": "M/d/yyyy"
              }
            }
          }
        }
      }
    }
    

    索引数据:

    {
      "data": {
        "reportDate": "12/3/2018"
      }
    }
    {
      "data": {
        "reportDate": "12/4/2018"
      }
    }
    {
      "data": {
        "reportDate": "12/5/2018"
      }
    }
    

    搜索查询:

    {
      "query": {
        "bool": {
          "must": {
            "range": {
              "data.reportDate": {
                "lte": "12/4/2018",
                "gte": "12/4/2018"
              }
            }
          }
        }
      }
    }
    

    搜索结果:

    "hits": [
          {
            "_index": "65312594",
            "_type": "_doc",
            "_id": "1",
            "_score": 1.0,
            "_source": {
              "data": {
                "reportDate": "12/4/2018"
              }
            }
          }
        ]
    

    【讨论】:

    • @Matt E 你有机会看我的回答吗,期待得到你的反馈?
    • 嗨@ESCoder - 感谢您的回答!今天早上正在处理另一个问题,但会在几个小时内给出您的解决方案!
    • 当然@Matt E 期待您的更新?
    • @MattE 已经很久了。我希望你做得很好?你有机会浏览我的答案吗,期待得到你的反馈?
    • 嘿@ESCoder,抱歉刚刚开始尝试您的解决方案,一切正常!感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 2020-06-23
    • 1970-01-01
    • 2015-09-19
    相关资源
    最近更新 更多