不为失败找理由,要为成功找方法。

查询语句无误,但是不显示查询结果的问题

Kibana | 作者 sailershen | 发布于2019年07月18日 | 阅读数:5070

想得到4小时以内的数据,查询语句如下:
GET /bj-sip_register/_search
{
"query": {
"range": {
"reg_time": {
"gte": "now-4h",
"lt": "now"
}
}
}
}
返回结果:
{
"took" : 665,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 0,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
}
}

把以上查询语句中的"gte"去掉:
GET /bj-sip_register/_search
{
"query": {
"range": {
"reg_time": {
"lt": "now"
}
}
}
}
查询结果命中一万条数据:
{
"took" : 37,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 10000,
"relation" : "gte"
},
"max_score" : 1.0,
"hits" : [
......

我看了官方文档,"gte": "now-4h"这个写法是对的,不知道为什么加上以后就没有命中结果。
已邀请:

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自: sailershen

你把mapping打印下,确认你的字段类型是date而不是long或者keyword或者其他?

sailershen

赞同来自:

谢谢laoyang360的回答。
我用命令看mapping:
curl -XGET 192.168.3.108:9200/bj-sip_register/_mapping/syslog?pretty
结果是:
{
"error" : {
"root_cause" : [
{
"type" : "illegal_argument_exception",
"reason" : "Types cannot be provided in get mapping requests, unless include_type_name is set to true."
}
],
"type" : "illegal_argument_exception",
"reason" : "Types cannot be provided in get mapping requests, unless include_type_name is set to true."
},
"status" : 400
}
我先看看怎么解决这个问题。

sailershen

赞同来自:

我在web页面上找到了查看mapping的地方,reg_time字段类型果然是text,是不是要通过重建索引的方法来改变reg_time的类型?
 
@laoyang360:
我在您的blog上看到《Elasticsearch重建索引方法》这篇文章,我这里 @version:1,_type:_doc,_index:bj-sip_register按文章的方法输入网址http://192.168.3.108:9200/bj-sip_register/_doc/1,页面内容是:
{"_index":"bj-sip_register","_type":"_doc","_id":"1","found":false}

和你文章里的显示不一样,我是elasticsearch 7。
 
 

要回复问题请先登录注册