2010-04-14 3 views
5

Я создаю tagging system for my siteКак удалить/обновить документ с помощью lucene?

я получил основу добавления документа в Lucene, но я могу показаться, чтобы выяснить, как удалить документ или обновить один, когда пользователь изменяет тег чего-то. Я нашел страницы, которые говорят, используя индекс документа, и мне нужно оптимизировать до эффекта, но как получить индекс документа? Также я видел другого, который сказал, чтобы использовать IndexWriter для удаления, но я не мог понять, как это сделать с этим.

Я использую C# asp.net и я не имею Java установить на этой машине

ответ

10

Какую версию Lucene вы используете? Класс IndexWriter имеет метод обновления, который позволяет вам обновлять (BTW обновление под капотом - это действительно удаление, за которым следует добавление). Вам нужно будет иметь некоторый идентификатор (например, идентификатор документа), который позволяет вам обновлять. Когда вы индексируете документ, добавьте уникальный идентификатор документа, такой как URL-адрес, счетчик и т. Д. Затем «Срок» будет идентификатором документа, который вы хотите обновить. Например, используя URL-адрес, вы можете обновить таким образом:

IndexWriter writer = ... 
writer.update(new Term("id","http://somedomain.org/somedoc.htm"), doc); 
+0

Incubating-Apache-Lucene.Net-2.0-004-11Mar07.bin.zip. Так может быть, lucene 2.0. – 2010-04-14 16:31:03

+0

Yikes, я только что понял дату. Я нашел тэг svn, используя Lucene.Net_2_9_1 – 2010-04-14 16:32:31

+0

Просто так я понятен. Doc - это новый документ, заполненный данными, которые я хочу. Этот термин является идентификатором старого документа, который я хочу обновить/заменить? -edit-update выглядит как DeleteAdd. doc не должен содержать тот же идентификатор или термин, что и старший. – 2010-04-14 18:01:27

3

вам нужно IndexReader удалить документ, я не уверен насчет версии .net но ++ версии Java и С API Lucene имеет класс IndexModifier, который скрывает различия между классами IndexReader и IndexWriter и использует только соответствующий, как вы звоните, addDocument() и removeDocument().

Кроме того, нет концепции обновления документа в Lucene, вы должны удалить его, чтобы повторно добавить его снова. Для этого вам нужно убедиться, что каждый документ имеет уникальный хранимый идентификатор в индексе.

+0

Замечательно знать об обновлениях. Я не вижу removeDocument и IndexModifier (возможно, .NET использует более старую версию lucene). Я вижу документ DeleteDocument в IndexReader. Он принимает «int docNum». Я понятия не имею, что с этим делать. Theres no docNum или docId в документе – 2010-04-14 16:02:35

+1

docnum является ключом перечислителя, например IndexReader rdr = IndexReader.Open (@ "Myindex"); int N = rdr.MaxDoc(); для (int n = 0; n Mikos

Смежные вопросы