Lucene.NET - Невозможно удалить документы с помощью IndexWriter - PullRequest
2 голосов
/ 12 мая 2011

Я принимаю проект, поэтому я все еще учусь этому. В проекте используется Lucence.NET. Я также понятия не имею, является ли эта часть функциональности правильной или нет. В любом случае, я создаю экземпляр:

var writer = new IndexWriter(directory, analyzer, false);

Для конкретных документов я звоню:

writer.DeleteDocuments(new Term(...));

В конце концов, я звоню обычному писателю.

Поле в объекте Term является Guid, преобразованным в строку (.ToString ("D")) и хранится в документе с использованием Field.Store.YES и Field.Index.NO.

Однако с этими настройками я не могу удалить эти документы. Цель состоит в том, чтобы удалить, а затем добавить обновленные версии, чтобы я получил дубликаты одного и того же документа. Я могу предоставить больше кода / объяснения, если это необходимо. Есть идеи? Спасибо.

Ответы [ 2 ]

7 голосов
/ 12 мая 2011

Поле должно быть проиндексировано. Если поле не проиндексировано, его термины не будут отображаться в перечислении.

4 голосов
/ 12 мая 2011

Я не думаю, что в том, как вы обращаетесь с автором, есть что-то не так.

Звучит так, как будто термин, который вы передаете DeleteDocuments, не возвращает никаких документов.Вы пытались выполнить запрос, используя тот же термин, чтобы увидеть, возвращает ли он какие-либо результаты?

Кроме того, если ваша цель состоит в простом воссоздании документа, вы можете вызвать UpdateDocument:

//     Updates a document by first deleting the document(s) containing term and
//     then adding the new document. The delete and then add are atomic as seen
//     by a reader on the same index (flush may happen only after the add).  NOTE:
//     if this method hits an OutOfMemoryError you should immediately close the
//     writer. See above for details.

Вы также можете попробовать SimpleLucene (http://simplelucene.codeplex.com) - это немного облегчает выполнение базовых задач Lucene.

[Обновление] Не знаю, как я это пропустил, но @Shashikant Kore правильный, вам нужночтобы убедиться, что поле проиндексировано, иначе ваш запрос термина ничего не даст.

...