【问题标题】:Elasticsearch range query not working as expectedElasticsearch 范围查询未按预期工作
【发布时间】:2019-10-24 18:52:27
【问题描述】:

我正在尝试通过在日期类型字段(本例中为“timeA”)上应用范围来获取数据。

我的查询是:

{
  "query": {
    "bool": {
      "must": [
        {
          "match_phrase": {
            "name": "A"
          }
        },
        {
          "range": {
            "timeA": {
              "lte": 9999
            }
          }
        }
      ]
    }
  }
}

我在 timeA 归档中没有任何小于 1558891800000 的数据。

所以预期的输出必须是:

  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 0,
    "max_score": null,
    "hits": []
  }
}

但我得到的实际输出是:

{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 1.287682,
    "hits": [
      {
        "_index": "checktimestamp",
        "_type": "doc",
        "_id": "AWr4sdJv_fFf5JZrQhXl",
        "_score": 1.287682,
        "_source": {
          "name": "A",
          "timeA": 1558899000000,
          "timeLocal": "27-1AM"
        }
      }
    ]
  }
}

timeA 字段的类型是日期。 我的elasticsearch版本是5.6.10,Kibana版本是5.6.10。

请提出这里的问题以及我该如何解决它。 提前致谢。

【问题讨论】:

    标签: elasticsearch kibana


    【解决方案1】:

    Elastic 将 4 位数字解析为年份,这意味着它匹配年份小于或等于 9999 的文档,我假设这是您的所有数据。

    为避免这种情况,您需要在映射中为您的日期字段定义严格的 format,现在这将允许“yyyy”格式潜入。 或者,不要在这些查询中使用少于 5 位的数字。

    【讨论】:

    • 谢谢汤姆,现在我明白了为什么它没有返回预期的输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多