所以我在弹簧框架中使用了弹性搜索,而且我很难通过确切的日期值获得点击。
这是我的属性映射:
{
"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"
}
}
}
}
有什么见解?
答案 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小时制。