我在 lucene 索引中搜索时遇到问题。当使用 indexSearcher 访问索引时,我得到以下信息:
java.lang.IllegalArgumentException: docID must be >= 0 and < maxDoc=1300700 (got docID=1368129)
用谷歌搜索没有帮助,所以我希望你能帮助我。
这是我构建索引的方式:
Document lineOfIndex = new Document();
lineOfIndex.add(new TextField(attributeName, Class
.forName(attributeType).cast(valueOfEntry).toString(),
Store.YES));
writer.addDocument(lineOfIndex);
使用 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
}
我要读取的索引大约有 100mb 大。Lucene 的版本是 4.3。
这是堆栈跟踪:
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)
任何帮助都会对你很好。
在此先感谢费边