elasticsearch,lucene,hibernate-search,Hibernate,elasticsearch,Lucene,Hibernate Search" /> elasticsearch,lucene,hibernate-search,Hibernate,elasticsearch,Lucene,Hibernate Search" />

Hibernate搜索计数直接代替Lucene和Elasticsearch的常规查询

Hibernate搜索计数直接代替Lucene和Elasticsearch的常规查询,hibernate,elasticsearch,lucene,hibernate-search,Hibernate,elasticsearch,Lucene,Hibernate Search,情况: 我在Java应用程序中使用ApacheLucene索引和Hibernate搜索。对于分页,我想计算单个索引上查询的所有命中数 现在我正在评估从ApacheLucene迁移到Elasticsearch(ES)作为索引后端的过程。Hibernate搜索仍然应该提供抽象,就像ApacheLucene一样 问题: 使用fullTextQuery.getResultSize()时,似乎执行了查询并存储了整个结果。随后将根据检索到的结果计算大小。Lucene和ES实现中似乎都是这样 在ES中,有用于

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

现在我正在评估从ApacheLucene迁移到Elasticsearch(ES)作为索引后端的过程。Hibernate搜索仍然应该提供抽象,就像ApacheLucene一样

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

在ES中,有用于此目的的方法。 这个API可以通过Hibernate搜索使用吗?检索索引中的所有文档时的一个问题是ES的窗口结果大小限制。我希望在使用_countAPI时性能也会有所提高

ApacheLucene是否有通过Hibernate搜索的计数功能


谢谢。

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

FullTextQuery fullTextQuery = session.createFullTextQuery( luceneQuery, ScientificArticle.class );
fullTextQuery.setMaxResults(0);
int count = fullTextQuery.getResultSize();
setMaxResults()
不影响
getResultSize()
返回的值

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