2

我试图找到基准来比较Elasticsearch Spring Data与 Elasticsearch HighLevelClient对于具有复杂嵌套聚合的搜索查询的性能,然后再做一个。

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

我想知道你们中是否有人同时使用并测试了它们的性能?是否有任何技术原因表明其中一个在此类查询中更快?

4

1 回答 1

2

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

我们的错误是返回聚合中的底层文档,这是要发送/(反)序列化的更多数据并且也不会使用缓存——这对我们的聚合产生了 400 毫秒和 40 毫秒的差异(当我们点击缓存)。

编辑 PJMeisch(希望你不介意@xeraa),不需要额外的答案:

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

正如@xeraa 已经提到的,如果您只需要 aggs 而不是查询数据,请确保不返回源文档,在 Spring Data Elasticsearch 中您可以使用NativeSearchQueryBuilder.withMaxResults(0). 然后将查询作为通常的方法传递给该ElasticsearchOperations.search()方法。

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

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

于 2022-01-01T12:15:15.507 回答