elasticsearch-如何找到确切的日期类型值?

时间:2014-11-17 12:12:18

标签: spring date elasticsearch

所以我在弹簧框架中使用了弹性搜索,而且我很难通过确切的日期值获得点击。

这是我的属性映射:

{
  "properties": {
    "creationDate": {
      "type": "date",
      "format": "dd-MM-yyyy HH:mm:ss"
    },
    ...
  }
}

这是java类中的映射:

@Field(type =   Date, format = DateFormat.custom, pattern ="dd-MM-yyyy HH:mm:ss")
public Calendar creationDate;

问题是当我尝试搜索确切的日期时:

GET test/searchableSo/_search
{
  "query": {
    "term": {
      "creationDate": {
        "value": "14-11-2014 05:55:46"
      }
    }
  }
}

只有当我使用长的等价物时,它才会返回任何内容:

{
  "query": {
    "term": {
      "creationDate": {
        "value": "1415987746214"
      }
    }
  }
}

有什么见解?

1 个答案:

答案 0 :(得分:4)

在处理日期字段时,通常使用范围过滤器而不是术语/匹配更安全。

Elasticsearch在内部将日期类型存储为long值。 所以我相信传递 1415987746214 ,而索引应该最终存储该值。

因此 1415987746214 与“ 14-11-2014 05:55:46”不一样。因为毫秒部分。

尝试在没有毫秒部分的情况下对其进行索引,即“ 1415987746000 ” 或者您可以使用 numeric_resolution 设置为映射中的秒数,并指定时间戳(自编号以来的秒数),即1415987746

示例:

 "properties": { "creationDate": { "type": "date", "format": "dd-MM-yyyy HH:mm:ss" ,"numeric_resolution" : "seconds"},..}

要么适用于查询:

{ "query": { "term": { "creationDate": { "value": "14-11-2014 17:55:46" } } } }

记得使用24小时制。