Lucene .NET IndexWriter DeleteDocuments不工作

时间:2011-06-30 13:39:49

标签: .net lucene lucene.net

以下是代码:

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

3 个答案:

答案 0 :(得分:6)

正如您在more recent post中发现的那样,您的ID列未被正确编入索引,因为SimpleAnalyzer使用的LetterTokenizer只返回字母。

请考虑使用KeywordAnalyzer代替id字段。

答案 1 :(得分:0)

由于SimpleAnalyzer将输入文本转换为小写,因此您将在索引中使用小写的术语。 你确定“insightId”也是小写的吗?

答案 2 :(得分:0)

您应该创建一个新的IndexWriter而不是计算已关闭的文档。