1

语境

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

问题

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

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

问题

  • 提取日期大于特定值的数据的正确查询是什么?
  • 如果我的查询在语法上是正确的,还有什么我可以检查的吗(例如字段的数据类型实际上是日期)?
  • 我应该如何解决导致这种情况的根源?
  • 等等
4

2 回答 2

1

解决方案

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

映射呢?

我之前看过映射。在我的索引中,它们不存在。我似乎记得阅读过将为具有强一致性的已知类型推断映射。
我的日期数据是一致的: - 没有空值 - 日期从 SQL 翻转到 C#,再到 Elastic

我想我可以实现一个映射,但我现在要进行 Epoch 转换,直到我出于其他令人信服的原因真正需要映射它。

于 2014-09-16T14:09:13.200 回答
0
  • 您的查询在语法上是正确的。
  • 使用get mappingAPI 查看文档映射:

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

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

于 2014-09-16T03:58:22.093 回答