之前的设置是一种类型的所有文档都在同一个索引中。但是由于类型的不同形式(概念上),并且出于备份目的,我需要单个类型的多个索引。
它们都将采用_feed 形式。虽然此设置在某些情况下很棒,但对于
client.prepareGet(index, typename, ids).execute().actionGet(); // works great if you know in which index to search
它没有用,因为不能使用通配符。我能做的是使用多个多重获取并交错结果。这会产生我想要的结果,但会显着增加查询量。
假设我肯定知道,给定索引只存在一个文档,有没有比为每个可能的索引在所有 _uids 上调用 multiget 更好的查询方法?
最佳答案
最好的方法是在您的应用程序中开发一种机制,允许您从 id 推断索引名称。但假设这是不可能的或不切实际的,你几乎只有两个选择。如果您需要实时获取,那么您的方法是唯一的方法。如果不需要实时获取,您可以使用 ids filter 对所有索引执行搜索。 .如果 id 列表很小,您可以从使用 routing 中受益。在您的搜索查询中。这样,搜索请求只会被分派(dispatch)到可能包含查询中列出的任何 id 的分片。但是,如果 id 列表足够大以跨越大多数分片,它不会提供任何好处。
关于Elasticsearch 通过多个索引上的 uid 获取多个文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32329233/