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