Elasticsearch Spring 复杂聚合的数据和 Elasticsearch HighLevelClient 性能

Elasticsearch Spring Data and Elasticsearch HighLevelClient performance for complex aggregations

我试图找到比较 Elasticsearch Spring Data with Elasticsearch HighLevelClient 搜索查询性能的基准,然后再进行复杂的嵌套聚合。

但我唯一发现的是,如果您需要 CRUD 操作,使用 spring 数据和一些其他功能作为自动配置会更容易。但是 none 其中与性能相关。

我想知道你们有没有人用过并测试过它们的性能?是否有任何技术原因表明其中之一在此类查询中速度更快?

此处最重要的部分是确保您获得正确的基础查询。我们最近遇到了一个案例,错误的设置让我们损失了近 10 倍的性能。 Spring 数据使用 High Level Rest Client,因此我通常希望没有或有少量开销;如果基础查询相同。框架差异可能足够小,我会优先考虑开发速度和熟悉程度。

Our mistake 是 return 聚合中的底层文档,这是要发送/(反)序列化的更多数据,也不会使用缓存——这使得400 毫秒与 40 毫秒的聚合差异(当我们命中缓存时)。

编辑P.J.Meisch(希望您不介意@xeraa),无需额外回答:

如前所述,Spring Data Elasticsearch 使用 Elasticsearch RestHighLevelClient(稍后将使用新的 Elasticsearch 客户端)并创建聚合查询,您需要使用 NativeSearchQuery 构建使用 Elasticsearch 的查询构建器进行查询。所以直接使用 RestHighLevelClient 构建查询是一样的。

正如@xeraa 已经提到的,如果您只需要聚合而不是查询数据,请确保不要 return 源文档,在 Spring Data Elasticsearch 中,您可以使用 NativeSearchQueryBuilder.withMaxResults(0)。然后像往常一样将查询传递给 ElasticsearchOperations.search() 方法。

Spring Data Elasticsearch 不会对 returned 聚合进行任何解析,您必须在此处执行与直接使用客户端相同的操作。

所以我看不出 Spring Data Elasticsearch 会导致性能问题。