这是我的日期格式:
val encodedImage: String
val imageBytes = android.util.Base64.decode(encodedImage, 0)
根据Elasticsearch文档,我可以这样做:
10:00 2019-06-03
但是,当我这样做时,它不会将其识别为日期(因此将其转换为时间戳。有人知道为什么吗?
https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html
答案 0 :(得分:2)
假设我们对您所遇到的date
字段具有以下映射
PUT <your_index_name>
{
"mappings":{
"properties":{
"date":{
"type":"date",
"format":"HH:mm yyyy-MM-dd||yyyy-MM-dd HH:mm"
}
}
}
}
注意我如何添加两种不同类型的 date formats
现在让我添加两个文档:
POST mydate/_doc/1
{
"date": "10:00 2019-06-03"
}
POST mydate/_doc/2
{
"date": "2019-06-03 10:00"
}
请注意上述两个日期值。 Semantically
的含义完全相同。查询时必须保留它。
现在,如果用户要基于语义<em> 来搜索日期值应该是什么,那么他/她应该同时获得两个文档。
POST <your_index_name>/_search
{
"query": {
"match": {
"date": "10:00 2019-06-03"
}
}
}
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "mydate",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"date" : "10:00 2019-06-03"
}
},
{
"_index" : "mydate",
"_type" : "_doc",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"date" : "2019-06-03 10:00"
}
}
]
}
}
在响应中观察到的是什么。这两个文件都被退回。
这只有在存储值的基本机制完全相同的情况下才有可能。在倒排索引中,这两个值将存储为相同的long
号。
现在,如果您删除该语义定义,那么这两个值就和简单的字符串没有什么不同,您知道10:00 2019-06-03
和2019-06-03 10:00
都是不同的,并且遵守 semantics < / em>字符串应该是什么(如果date
的执行方式是这样,为什么要完全使用date
数据类型,这是正确的)。
我们在映射中指定为format
的是日期值应如何显示给用户。
请注意此link中的以下信息:
内部将日期转换为UTC(如果指定了时区) 并存储为一个整数,表示自纪元以来的毫秒数。
日期查询在内部转换为与此相关的范围查询 长表示形式以及聚合和存储字段的结果 根据日期格式转换回字符串 与该字段相关联。
希望这会有所帮助!