且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

弹性搜索跨多个索引搜索 - 忽略不存在的索引

更新时间:2023-09-09 15:02:16

如果您使用通配符,例如 example-idex-2016-07 - * ,则不需要关心这个和ES将找出匹配的指标。



如果您真的想枚举索引,您可以指定搜索中的多重index.htmlrel =nofollow> ignoreUnavailable:true $ c>

  return elastic.search({
index:[
example-idex-chalk7- 25,
example-idex-2016-07-24],//这不存在
],
ignoreUnavailable:true,
...
});

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


I have elastic cluster where my indexes contain the current date - e.g:

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

Is it possible to query across multiple indexes, ignoring ones that don't exist. For example this WORKS:

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

Whereas this throws back a 404:

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

I would expect the second example to return documents from 25th only.

If you use a wildcard like example-idex-2016-07-* you don't need to care about this and ES will figure out the matching indices.

If you really want to enumerate indices you can specify ignoreUnavailable: true in your search call:

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

Alternatively, you can also use index aliases and query only that alias. When creating a new index, you also add that alias to the index. The good thing about this is that your client code doesn't need to be changed and will always only query the alias, i.e. implicitly all indices having that alias.