我使用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的分页?
答案 0 :(得分:0)
我不熟悉此错误,但我建议您实施一种方法,您可以使用SearcherManager(JavaDoc)
使用NRT(近实时)搜索这是一项很大的努力,但最后你会收到更好的索引更新处理,特别是如果它们更频繁地更新。
请参阅: Lucene NRT beginner tutorial或related stackoverflow answer