Elasticsearch范围查询未按预期工作

时间:2019-06-10 11:09:57

标签: elasticsearch kibana

我试图通过在日期类型字段(在这种情况下为“ timeA”)上应用范围来获取数据。

我的查询是:

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

提交的时间少于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"
        }
      }
    ]
  }
}

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

请在这里提出问题所在,以及如何解决。 预先感谢。

1 个答案:

答案 0 :(得分:2)

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

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