Elasticsearch搜索多个索引 - 忽略不存在的索引

时间:2016-07-26 13:27:16

标签: angularjs elasticsearch

我有弹性集群,其索引包含当前日期 - 例如:

example-idex-2016-07-26 --> exists
example-idex-2016-07-25 --> exists
example-idex-2016-07-24 --> doesn't exist (weekend)
...

是否可以跨多个索引进行查询,忽略那些不存在的索引。例如, WORKS

return elastic.search({
        index: [
            "example-idex-2016-07-26",
            "example-idex-2016-07-25"],
        ],
        ...
});

会抛出404

return elastic.search({
        index: [
            "example-idex-2016-07-25",
            "example-idex-2016-07-24"], //this doesn't exist
        ],
        ...
});

我希望第二个例子只返回25日文档。

1 个答案:

答案 0 :(得分:4)

如果您使用像example-idex-2016-07-*这样的通配符,则不需要关心这一点,ES会找出匹配的索引。

如果您真的想要枚举索引,可以在search来电中指定ignoreUnavailable: true

return elastic.search({
        index: [
            "example-idex-2016-07-25",
            "example-idex-2016-07-24"], //this doesn't exist
        ],
        ignoreUnavailable: true,
        ...
});

或者,您也可以使用index aliases并仅查询该别名。创建新索引时,还要将该别名添加到索引中。这样做的好处是您的客户端代码不需要更改,并且始终只查询别名,即隐含所有具有该别名的索引。