具有许多元素的术语查询的性能

Performance of Terms Query with many elements

我计划在我的所有查询中使用包含许多术语的 Terms Query(视情况而定,最多 40-50k 个术语)。

这些字词将按照说明 here 使用查找从另一个索引中获取。 Elasticsearch 在内部获取它们,所以至少它们不会通过线路,但查询本身看起来相当繁重。

我想知道查询性能是否会好。无论如何,我打算进行压力测试,但不确定这是否会顺利升级。有人有过此类查询的经验或知道 Elasticsearch 内部如何处理它们吗?

谢谢!

数百项后的性能会快速下降: https://github.com/elastic/elasticsearch/issues/18829

以下是最初提到的超级线程: https://github.com/elastic/elasticsearch/issues/11511#issuecomment-224028056

ES 将在您的分片中单独搜索每个术语,因此随着添加更多术语,它会使集群陷入困境。不过,与任何 Elasticsearch 一样,调整分片数量(在您的情况下为副本)、节点数和其他配置选项可能会有所帮助。我建议进行性能测试以了解您正在处理什么,但一开始不要期望任何事情。

我在 Elasticsearch 存储库中 opened an issue 关于这个问题,正如我担心的那样,即使使用查找,如果使用很多术语,这种查询也会变得非常慢。

还有,我在issue中提到了,但是我自己压测了,自己查了:

filtering with around 20 thousand terms make the query quite slow (more than 500ms).