0
我在lucene删除中遇到了一个奇怪的问题。我通过ids和代码运行成功地从lucene中删除文档。但他们重新出现在搜索中。这里有趣的是,删除的文档不会出现在同一个会话中,但是当我重新启动应用程序(所有Singletons重新初始化)时,这些已删除的文档将出现在搜索中。不知道这里发生了什么问题。我使用Lucene 4.0Lucene删除文件再次出现在搜索中
这里是我删除代码
indexWriter = new IndexWriter(storageDirectory, indexWriterConfig);
try {
indexWriter.deleteDocuments(new Term(FIELD_ID, Id));
indexWriter.commit();
indexWriter.close();
return true;
} catch (Exception e) {
// exception caught.
} finally {
//closing index writer.
closeIndexWriter();
}
下面是搜索代码
try {
ArrayList searchResults = new ArrayList();
IndexReader indexReader = DirectoryReader.open(new MMapDirectory(LuceneIndexer.getIndexingDirectory(mContext)));
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
int noOfResults = LuceneSearcher.MAX_SEARCH_RESULT_LIMIT;
TopDocs topDocs = indexSearcher.search(query, noOfResults);
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for (ScoreDoc scoreDoc : scoreDocs) {
IndexedSearchResult searchResult = new IndexedSearchResult(scoreDoc.doc, mContext);
if (loadDocuments) {
searchResult.loadData(indexReader); // load data loads document and data from it.
}
searchResults.add(searchResult);
}
} catch (IOException e) {
// exception things
} finally {
// close reader
}
新的初始化发生。我添加了搜索代码。 – Apr444
这看起来像lucene不能更新目录的I/O部分中的记录(在这种情况下删除)。因此,在同一个会话中,您可以获得更新后的结果,因为它保存在内存中,但并未真正写入光盘。 删除后是否有任何I/O异常? – dom
附加问题,为什么使用MMapDirectory? – dom