弹性搜索日期范围过滤器不起作用

时间:2014-09-15 15:56:11

标签: date elasticsearch filter range range-query

上下文

我有一个名为“date”的字段的索引,其中包含日期。我需要一个elasticsearch查询,它返回日期大于特定日期值的记录。

问题

使用范围过滤器返回运行以下查询不起作用。结果集中返回具有较早日期的记录。

{
  "size": 1000,
  "query": {
    "filtered": {
      "filter": {
        "range": {
          "date": {
            "gt": "2014-02-23T00:00:00"
          }
        }
      }
    }
  }
} 

问题

  • 在日期大于a的情况下提取数据的正确查询是什么 具体价值?
  • 如果我的查询在语法上是正确的,那么就存在 我可以检查的其他东西(例如,字段的数据类型实际上是 日期)?
  • 我应该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

解决方案

代替实施映射,我想出了一个部分解决方案。我用Chrome来分析一些Kibana流量。我注意到Kibana将日期过滤器作为int值传递。所以,我使用Unix时间戳转换将日期转换为整数,现在情况正常。 (参考http://www.epochconverter.com/

映射怎么样?

我早先看过这些映射。在我的索引上,它们不存在。我似乎记得读到,对于具有强一致性的已知类型,将推断出映射 我的日期数据是一致的: - 没有空 - 日期将从SQL转换为C#,再转换为Elastic

我想我可以实现一个映射,但我现在正在使用Epoch转换,直到我真正需要将其映射为其他一些令人信服的理由。

答案 1 :(得分:0)

  • 您的查询在语法上是正确的。
  • 使用get mapping API查看文档映射:

    curl -XGET 'http://localhost:9200/twitter/_mapping/tweet'

  • 很难说哪里出错了。可能date字段的映射实际上不是日期类型。