我有与某些product_id相关的文档索引。我想查找所有具有特定ID的文档(将找到约10万个product_id,索引总数为1亿个)。
在这种情况下,筛选查询是否是最快,最好的选择?
"query": {
"bool": {
"filter": {"terms": {"product_id": product_ids}
}
}
还是将ID分块并仅使用术语查询或其他方式更好?
这个问题可能有点重复,但是我非常感谢最佳实践建议(以及一些推理)。
最佳答案
经过一些测试和更多的阅读,我找到了答案:
过滤查询的工作速度比使用术语查询的块要快得多。
但是制作真正的大型过滤器会大大减慢获得结果的速度。
在我的情况下,使用具有1万个ID的块的过滤器查询要比同时使用具有10万个ID的过滤器查询快10倍(顺便说一句,此数量已在Elasticsearch 6中受到限制)。
同样来自官方elasticsearch documentation:
Potentially the amount of ids specified in the terms filter can be a lot. In this scenario it makes sense to use the terms filter’s terms lookup mechanism.
要考虑的唯一缺点是过滤器查询存储在缓存中。 (高速缓存实现LRU逐出策略:当高速缓存已满时,会将最近最少使用的数据逐出,以便为新数据让路。)
附言在所有情况下,我始终使用滚动。
关于elasticsearch - Elasticsearch过滤器与多个ID的词条查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51464083/