Lucene .NET IndexWriter DeleteDocuments не работает - PullRequest
4 голосов
/ 30 июня 2011

Вот код:

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 оба раза

У меня также есть небольшое приложение с графическим интерфейсом, которое я написал, которое читает индекс и печатает документы в хорошем формате.,Документ с полем id, равным insightId, определенно существует, и STILL существует после «удаления».

Вот как создается поле id

doc.Add(New Field("id", insightID, Field.Store.YES, Field.Index.ANALYZED)) //insightID is an integer

Ответы [ 3 ]

6 голосов
/ 30 июня 2011

Как вы, вероятно, обнаружили в своем более новом сообщении , ваш столбец идентификаторов не индексируется правильно, потому что SimpleAnalyzer использует LetterTokenizer , который возвращает только буквы.

Попробуйте вместо этого использовать KeywordAnalyzer для поля id.

0 голосов
/ 30 июня 2011

Вы должны создать новый IndexWriter вместо подсчета документов на закрытом.

0 голосов
/ 30 июня 2011

Поскольку SimpleAnalyzer преобразует вводимый текст в нижний регистр, в индексе будут присутствовать строчные термины.Вы уверены, что insightId также в нижнем регистре?

...