Hibernate Search 直接计数,而不是使用 Lucene 和 Elasticsearch 进行正常查询

Hibernate Search count directly instead of normal query with Lucene and Elasticsearch

情况: 我在我的 Java 应用程序中使用 Apache-Lucene 索引和 Hibernate 搜索。对于分页,我想计算单个索引上查询的所有命中数。

现在我正在评估从 Apache-Lucene 迁移到 Elasticsearch (ES) 作为索引后端。 Hibernate Search 仍应提供抽象,就像 Apache-Lucene 一样。

问题: 使用 fullTextQuery.getResultSize() 时,似乎执行了查询并存储了整个结果。之后根据检索到的结果计算大小。这似乎是 Lucene 以及 ES 实现中的情况。

在 ES 中有用于此目的的 _count API。 这个 API 可以通过 Hibernate Search 使用吗?检索索引中所有文档时的一个问题是 ES 的 window 结果大小限制。我希望使用 _count API.

时性能也会提高

Apache-Lucene 有通过 Hibernate Search 的计数功能吗?

谢谢。

在 Hibernate Search 5 中,您必须将最大结果大小设置为 0,以便 Hibernate Search 不加载任何内容:

FullTextQuery fullTextQuery = session.createFullTextQuery( luceneQuery, ScientificArticle.class );
fullTextQuery.setMaxResults(0);
int count = fullTextQuery.getResultSize();

setMaxResults() 不影响 getResultSize().

返回的值

这种行为有点奇怪,这是理所当然的,但由于与结果缓存方式相关的历史原因,在 Search 5 中必须保持这种方式。 在 Hibernate Search 6 中,我们将更改行为,您不必担心调用 setMaxResults() 只是为了检索结果大小。