弹性搜索:hour_minute_second映射returns空数据
Elastic search: hour_minute_second mapping returns empty data
下面是我为搜索字段创建的映射
PUT /sample/_mapping
{
"properties": {
"webDateTime1": {
"type": "date",
"format": "dd-MM-yyyy HH:mm:ss||dd-MM-yyyy||hour_minute_second"
}
}
}
如果我根据“04-04-2019 20:17:18”搜索得到正确的数据
如果我根据“04-04-2019”进行搜索以获得正确的数据
如果我基于“20:17:18”进行搜索,我不知道总是会得到空结果。
任何帮助将不胜感激。
当您摄取一些示例文档时:
POST sample/_doc/1
{"webDateTime1":"04-04-2019 20:17:18"}
POST sample/_doc/2
{"webDateTime1":"04-04-2019"}
POST sample/_doc/3
{"webDateTime1":"20:17:18"}
然后在日期字段上聚合,
GET sample/_search
{
"size": 0,
"aggs": {
"dt_values": {
"terms": {
"field": "webDateTime1"
}
}
}
}
您将看到这些值 实际上 是如何编入索引的:
...
"buckets" : [
{
"key" : 73038000,
"key_as_string" : "01-01-1970 20:17:18",
"doc_count" : 1
},
{
"key" : 1554336000000,
"key_as_string" : "04-04-2019 00:00:00",
"doc_count" : 1
},
{
"key" : 1554409038000,
"key_as_string" : "04-04-2019 20:17:18",
"doc_count" : 1
}
]
...
这就是您对 20:17:18
的查询让您头疼的原因。
现在,您通常希望像这样使用 range
查询:
GET sample/_search
{
"query": {
"range": {
"webDateTime1": {
"gte": "20:17:18",
"lte": "20:17:18",
"format": "HH:mm:ss"
}
}
}
}
注意 format
参数。但同样,如果您不在 datetime
字段中提供 date
,结果将采用 unix 纪元作为日期。
下面是我为搜索字段创建的映射
PUT /sample/_mapping
{
"properties": {
"webDateTime1": {
"type": "date",
"format": "dd-MM-yyyy HH:mm:ss||dd-MM-yyyy||hour_minute_second"
}
}
}
如果我根据“04-04-2019 20:17:18”搜索得到正确的数据 如果我根据“04-04-2019”进行搜索以获得正确的数据 如果我基于“20:17:18”进行搜索,我不知道总是会得到空结果。 任何帮助将不胜感激。
当您摄取一些示例文档时:
POST sample/_doc/1
{"webDateTime1":"04-04-2019 20:17:18"}
POST sample/_doc/2
{"webDateTime1":"04-04-2019"}
POST sample/_doc/3
{"webDateTime1":"20:17:18"}
然后在日期字段上聚合,
GET sample/_search
{
"size": 0,
"aggs": {
"dt_values": {
"terms": {
"field": "webDateTime1"
}
}
}
}
您将看到这些值 实际上 是如何编入索引的:
...
"buckets" : [
{
"key" : 73038000,
"key_as_string" : "01-01-1970 20:17:18",
"doc_count" : 1
},
{
"key" : 1554336000000,
"key_as_string" : "04-04-2019 00:00:00",
"doc_count" : 1
},
{
"key" : 1554409038000,
"key_as_string" : "04-04-2019 20:17:18",
"doc_count" : 1
}
]
...
这就是您对 20:17:18
的查询让您头疼的原因。
现在,您通常希望像这样使用 range
查询:
GET sample/_search
{
"query": {
"range": {
"webDateTime1": {
"gte": "20:17:18",
"lte": "20:17:18",
"format": "HH:mm:ss"
}
}
}
}
注意 format
参数。但同样,如果您不在 datetime
字段中提供 date
,结果将采用 unix 纪元作为日期。