索引更新时使用searchAfter的Lucene分页

时间:2017-11-13 08:29:26

标签: lucene

我使用searchAfter提供的IndexSearcher方法对Lucene实施了分页。在每次通话中,我都会传递上一页中返回的最后一个ScoreDoc

问题在于,有时,索引会在页面和页面之间进行更新,偶尔我会收到此异常:

java.lang.IllegalArgumentException: after.doc exceeds the number of 
documents in the reader: after.doc=337 limit=337
    at 
org.apache.lucene.search.IndexSearcher.searchAfter(IndexSearcher.java:434)

我理解Lucene时不时地更改文档ID(段合并等),我猜这就是为什么发生这种异常的原因,因为searchAfter依赖于那些文档ID。

如何改进此分页机制以避免此异常?有没有更好的方法来实现与Lucene的分页?

1 个答案:

答案 0 :(得分:0)

我不熟悉此错误,但我建议您实施一种方法,您可以使用SearcherManager(JavaDoc

使用NRT(近实时)搜索

这是一项很大的努力,但最后你会收到更好的索引更新处理,特别是如果它们更频繁地更新。

请参阅: Lucene NRT beginner tutorialrelated stackoverflow answer