情景:我在Java应用程序中使用Apache-Lucene索引和Hibernate搜索。对于分页,我希望对单个索引上的查询的所有命中进行计数。
现在我正在评估从Apache-Lucene迁移到Elasticsearch (ES)作为索引后端。Hibernate搜索应该仍然提供抽象,就像Apache-Lucene一样。
问:当使用fullTextQuery.getResultSize()时,似乎执行了查询并存储了整个结果。然后根据检索到的结果计算大小。在Lucene和ES实现中似乎都是这种情况。
在ES中有用于此目的的_count API。这个API可以通过Hibernate Search使用吗?检索索引中的所有文档时的一个问题是ES的窗口结果大小限制。我希望在使用_count应用程序接口时,性能也会有所提高。
Apache-Lucene有没有通过Hibernate搜索的计数功能?
谢谢。
发布于 2019-05-21 19:25:31
在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()。
https://stackoverflow.com/questions/56237029
复制相似问题