elasticsearch - Elasticsearch过滤器与多个ID的词条查询

标签 elasticsearch elasticsearch-5

我有与某些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/

相关文章:

database - ElasticSearch如何删除文档(如果字段存在)?

禁用对象中的 ElasticSearch 查询字段

elasticsearch - 是否可以在不将特定数据加载到索引的情况下检查特定数据是否与查询匹配?

elasticsearch - Elasticsearch在查询中使用别名时查找哪些索引包含命中

elasticsearch - Elastic Search 从嵌套对象中删除元素

elasticsearch - ElasticSearch无法在其中包含撇号的关键字字段上返回结果

elasticsearch - 如何为我的Lucene查询添加过滤器?

amazon-web-services - 如何将转换后的日志记录索引到 AWS Elasticsearch 中?

linux - 使用 Fluentd 在 ElasticSearch 中存储日志

json - ElasticSearch:在字段中包含字段的日期范围