要尝试此错误,我尝试使用Elasticsearch 2.x和5.x,但不能使用其中任何一种。
我的Elasticsearch实例中保存了很多日志。他们有一个名为 timestamp 的字段,其格式为" YYYY-MM-dd HH-mm-ss.SSS" (例如," 2017-11-02 00:00:00.000")。当我尝试通过POSTMAN发送查询时:
{
"query": {
"range": {
"timestamp": {
"gte": "2017-10-21 00:00:00.000",
"lte": "2017-10-27 00:00:00.000"
}
}
}
}
我什么都没收到,而且我在这个范围内有超过500个日志。我做错了什么?
修改 : 我的索引(loganalyzer):
{
"loganalyzer" : {
"aliases" : { },
"mappings" : {
"logs" : {
"properties" : {
"entireLog" : {
"type" : "string"
},
"formattedMessage" : {
"type" : "string"
},
"id" : {
"type" : "string"
},
"level" : {
"type" : "string"
},
"loggerName" : {
"type" : "string"
},
"testNo" : {
"type" : "string"
},
"threadName" : {
"type" : "string"
},
"timestamp" : {
"type" : "string"
}
}
}
},
"settings" : {
"index" : {
"refresh_interval" : "1s",
"number_of_shards" : "5",
"creation_date" : "1507415366223",
"store" : {
"type" : "fs"
},
"number_of_replicas" : "1",
"uuid" : "9w3QQQc0S0K0NcKtOERtTw",
"version" : {
"created" : "2040699"
}
}
},
"warmers" : { }
}
}
我收到的是发送请求的内容:
{
"took": 429,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
状态200(确定)。
答案 0 :(得分:1)
使用映射进行编辑表明存在问题。你没有得到任何结果的原因是因为它试图找到一个"范围"对于字符串,您要提供索引中字段的值,这些值也被视为字符串。
"timestamp" : {
"type" : "string"
}
Here's the elastic documentation on that mapping type
您需要在编制索引之前将日期映射应用于该字段,或者重新索引到在摄取之前应用该映射的新索引。
以下是映射请求的外观,符合您的时间戳格式:
PUT loganalyzer
{
"mappings": {
"logs": {
"properties": {
"timestamp": {
"type": "date",
"format": "YYYY-MM-dd HH-mm-ss.SSS"
}
}
}
}
}