我计划Terms Query
在我的所有查询中使用包含许多术语(取决于情况,最多 40-50k 术语)。
这些术语将使用此处解释的查找从另一个索引中获取。Elasticsearch 在内部使用它们,因此至少它们不会通过线路,但查询本身看起来很繁重。
我想知道查询性能是否会很好。无论如何,我正计划进行压力测试,但不确定这是否会很好地升级。有人对这类查询有过经验,或者知道 Elasticsearch 如何在内部处理它们?
谢谢!
我计划Terms Query
在我的所有查询中使用包含许多术语(取决于情况,最多 40-50k 术语)。
这些术语将使用此处解释的查找从另一个索引中获取。Elasticsearch 在内部使用它们,因此至少它们不会通过线路,但查询本身看起来很繁重。
我想知道查询性能是否会很好。无论如何,我正计划进行压力测试,但不确定这是否会很好地升级。有人对这类查询有过经验,或者知道 Elasticsearch 如何在内部处理它们?
谢谢!
数百个术语后的性能会快速下降: https ://github.com/elastic/elasticsearch/issues/18829
以下是最初提到的一个 uber 线程: https ://github.com/elastic/elasticsearch/issues/11511#issuecomment-224028056
ES 将在您的分片中单独搜索每个术语,因此随着添加更多术语,它会使集群陷入困境。与任何 Elasticsearch 一样,调整分片数量(在您的情况下为副本)、节点计数和其他配置选项可能会有所帮助。我建议进行性能测试以了解您正在处理的内容,但最初不要期望任何东西。
我在 Elasticsearch 存储库中打开了一个关于这个问题的问题,正如我所担心的,即使使用查找,如果与许多术语一起使用,这种查询会变得非常慢。
另外,我在问题中提到了它,但我对其进行了压力测试并自己检查了它:
过滤大约 20,000 个术语会使查询变得非常慢(超过 500 毫秒)。