以下是代码:
Try
Dim util As New IndexerUtil()
Dim dir As Lucene.Net.Store.Directory = FSDirectory.Open(New DirectoryInfo(util.getIndexDir()))
Dim indexWriter As New IndexWriter(dir, New SimpleAnalyzer(), indexWriter.MaxFieldLength.UNLIMITED)
Dim numDocs As Integer = indexWriter.NumDocs()
indexWriter.DeleteDocuments(New Term("id", insightId))
indexWriter.Optimize()
indexWriter.Commit()
indexWriter.Close()
numDocs = indexWriter.NumDocs()
Catch ex As Exception
LOG.Error("Could not remove insight " + insightId + " from index", ex)
End Try
numDocs = 85两次
我还有一个我写的小gui应用程序,它读取索引并以漂亮的格式打印文档。具有等于insightId的id字段的doc肯定存在,并且在“删除”之后存在STILL。
以下是如何创建id字段
doc.Add(New Field("id", insightID, Field.Store.YES, Field.Index.ANALYZED)) //insightID is an integer
答案 0 :(得分:6)
正如您在more recent post中发现的那样,您的ID列未被正确编入索引,因为SimpleAnalyzer使用的LetterTokenizer只返回字母。
请考虑使用KeywordAnalyzer代替id
字段。
答案 1 :(得分:0)
由于SimpleAnalyzer将输入文本转换为小写,因此您将在索引中使用小写的术语。 你确定“insightId”也是小写的吗?
答案 2 :(得分:0)
您应该创建一个新的IndexWriter而不是计算已关闭的文档。