Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 319
SDekov Avatar asked Mar 12 '23 14:03

SDekov


1 Answers

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.

like image 187
Val Avatar answered Apr 27 '23 17:04

Val