Stoyan Dekov Stoyan Dekov - 4 months ago 55
AngularJS Question

Elasticsearch search across multiple indexes - ignore non-existing indexes

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.

Val Val
Answer

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.

Comments