如何快捷的判断一批索引中不存在的或 close 的索引

来源:互联网 发布:c语言画线函数 编辑:程序博客网 时间:2024/06/08 18:15

Elasticsearch查询多个索引时,如果其中某个索引不存在或close,则该查询直接返回 ”404 索引丢失“ 错误

如:

GET /ocslog-2016.08.03,ocslog-2016.08.04,ocslog-2016.08.05,ocslog-2016.08.06/_search

假如:ocslog-2016.08.03不存在,则将直接返回:

{    "error": "IndexMissingException[[ocslog-2016.08.03] missing]",    "status": 404}

这时,可以先调用下面这个api,检查索引是否存在

GET /ocslog-2016.08.03,ocslog-2016.08.04,ocslog-2016.08.05,ocslog-2016.08.06/_alias

返回:

{    "ocslog-2016.08.05": {        "aliases": {}    },    "ocslog-2016.08.06": {        "aliases": {}    },    "ocslog-2016.08.04": {        "aliases": {}    }}

说明:存在三个索引

再次执行:

GET /ocslog-2016.08.04,ocslog-2016.08.05,ocslog-2016.08.06/_search

如果,这三个索引中 ocslog-2016.08.04 索引是close状态的,将返回:
{
“error”: “IndexClosedException[[ocslog-2016.08.04] closed]”,
“status”: 403
}

这时,可以再调用下面的api,检查索引的状态

GET /_cat/indices/ocslog-2016.08.04,ocslog-2016.08.05,cdr-2015-02-26?v

返回:

health status index             pri rep docs.count docs.deleted store.size pri.store.size green  open   ocslog-2016.08.05   1   1          2            0     17.2kb          8.6kb green  open   ocslog-2016.08.06   1   1         13            0     25.3kb         12.6kb        close  ocslog-2016.08.04                                                              

分析下这个返回结果,可以过滤掉 close 的索引

最后得到二个可以正确 _search 的索引:

GET /ocslog-2016.08.05,ocslog-2016.08.06/_search

正常查询出结果

其实 kibana 的查询就是这样处理的,不过kibana没有过滤 close 的索引,如果查询索引中有 close 状态的索引,将返回失败,查询不到任何结果

0 0
原创粉丝点击