Lucene:DocID太高,无法从IndexSearcher获取异常

Lucene:DocID太高,无法从IndexSearcher获取异常,lucene,indexing,Lucene,Indexing,我在lucene索引中搜索时遇到问题。使用indexSearcher访问索引时,我得到以下结果: java.lang.IllegalArgumentException: docID must be >= 0 and < maxDoc=1300700 (got docID=1368129) 索引使用RAMDirectory加载到RAM中。下面是我如何获取文档的方法: IndexSearcher searcher = new IndexSearcher(indexReader); Sc

我在lucene索引中搜索时遇到问题。使用indexSearcher访问索引时,我得到以下结果:

java.lang.IllegalArgumentException: docID must be >= 0 and < maxDoc=1300700 (got docID=1368129)
索引使用RAMDirectory加载到RAM中。下面是我如何获取文档的方法:

IndexSearcher searcher = new IndexSearcher(indexReader);
ScoreDoc[] hits = searcher.search(toSearch, 100).scoreDocs;
//move hits in ArrayList docs
for (int i = 0; i < docs.size(); i++) {
        int docID = docs.get(i).doc;
        Document d = searcher.doc(docID,
            SearchService.fieldnamesForTableAsSet(table));
//do something with the document
}
IndexSearcher searcher=新的IndexSearcher(indexReader);
ScoreDoc[]hits=searcher.search(toSearch,100).scoreDocs;
//移动ArrayList文档中的点击
对于(int i=0;i
我试图读取的索引大约有100mb大。 Lucene的版本是4.3

以下是stacktrace:

java.lang.IllegalArgumentException: docID must be >= 0 and < maxDoc=1300700 (got docID=1337488)
org.apache.lucene.index.BaseCompositeReader.readerIndex(BaseCompositeReader.java:182)
org.apache.lucene.index.BaseCompositeReader.document(BaseCompositeReader.java:109)
org.apache.lucene.index.IndexReader.document(IndexReader.java:447)
org.apache.lucene.search.IndexSearcher.doc(IndexSearcher.java:204)
de.fh.metadatenservice.search.SearchResultList.<init>(SearchResultList.java:42)
de.fh.metadatenservice.search.SearchService.processRequest(SearchService.java:78)
de.fh.metadatenservice.controller.handlers.SearchHandler.processRequest(SearchHandler.java:19)
de.fh.metadatenservice.controller.FrontController.doGet(FrontController.java:112)
de.fh.metadatenservice.controller.FrontController.doPost(FrontController.java:136)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
java.lang.IllegalArgumentException:docID必须大于等于0且
你要是能帮上忙就好了

提前谢谢
Fabian

根据受保护构造函数中计算的maxDoc源代码

可能是在创建了
indexReader
之后,但在调用
searcher.search()
之前,索引被修改,因此maxDoc无效

尝试在紧靠此行之前实例化
indexReader


IndexSearcher searcher=新的IndexSearcher(indexReader)

Stacktrace现在是问题所在。您在对答案的评论中说您在某处创建了一个新的搜索器,但您的代码与此不匹配。你能用正确的代码更新你的问题吗?谢谢你的回复。我会查的。非常感谢!这就是解决办法。在处理文档之前,我打开了一个新的IndexSearcher,而不是从查询中传递旧的搜索器。
java.lang.IllegalArgumentException: docID must be >= 0 and < maxDoc=1300700 (got docID=1337488)
org.apache.lucene.index.BaseCompositeReader.readerIndex(BaseCompositeReader.java:182)
org.apache.lucene.index.BaseCompositeReader.document(BaseCompositeReader.java:109)
org.apache.lucene.index.IndexReader.document(IndexReader.java:447)
org.apache.lucene.search.IndexSearcher.doc(IndexSearcher.java:204)
de.fh.metadatenservice.search.SearchResultList.<init>(SearchResultList.java:42)
de.fh.metadatenservice.search.SearchService.processRequest(SearchService.java:78)
de.fh.metadatenservice.controller.handlers.SearchHandler.processRequest(SearchHandler.java:19)
de.fh.metadatenservice.controller.FrontController.doGet(FrontController.java:112)
de.fh.metadatenservice.controller.FrontController.doPost(FrontController.java:136)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)