2010-04-14 15 views
5

Estoy creando un tagging system for my site¿Cómo borro/actualizo un documento con lucene?

Tengo los fundamentos de la adición de un documento a Lucene pero puedo parecen encontrar la manera de eliminar un documento o actualizar uno cuando el usuario cambia las etiquetas de algo. Encontré páginas que dicen usar el índice del documento y necesito optimizar antes el efecto, pero ¿cómo obtengo el índice del documento? También vi otro que decía usar IndexWriter para eliminar, pero tampoco pude averiguar cómo hacerlo con eso.

estoy usando C# asp.net y no tengo java instalar en esa máquina

Respuesta

10

¿Qué versión de Lucene estás usando? La clase IndexWriter tiene un método de actualización que le permite actualizar (por cierto, una actualización debajo del capó es realmente una eliminación seguida de un complemento). Necesitará tener algún identificador (como documento ID) que le permita actualizar. Cuando indexe el documento, agregue un identificador de documento único, como una URL, un contador, etc. Luego, el "Término" será el ID del documento que desea actualizar. Por ejemplo, utilizando URL puede actualizar así:

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

Incubating-Apache-Lucene.Net-2.0-004-11Mar07.bin.zip. Entonces quizás Lucene 2.0. –

+0

Sí, acabo de darme cuenta de la fecha. Encontré una etiqueta svn usando Lucene.Net_2_9_1 –

+0

Solo para que quede claro. Doc es el nuevo documento lleno de los datos que quiero. El término es la identificación del documento anterior que quiero actualizar/reemplazar? -edit- actualización parece un DeleteAdd. doc no necesita tener el mismo id o término que el anterior. –

3

Hace falta un programa IndexReader para eliminar un documento, no estoy seguro acerca de la versión de .NET pero las versiones de Java y C++ de la API Lucene tiene una clase IndexModifier que oculta las diferencias entre las clases IndexReader y IndexWriter y simplemente utiliza la apropiada al llamar al addDocument() y removeDocument().

Además, no existe el concepto de actualizar un documento en Lucene, tiene que eliminarlo y volver a agregarlo. Para hacer esto, deberá asegurarse de que cada documento tenga una identificación almacenada única en el índice.

+0

ideal para conocer las actualizaciones. No veo removeDocument ni IndexModifier (tal vez .net está usando una versión anterior de lucene). Veo un DeleteDocument en IndexReader. Acepta 'int docNum'. No tengo idea de qué hacer con eso. Theres no DOCNUM o DocID en el Documento –

+1

la DOCNUM es la clave empadronador, por ejemplo IndexReader rdr = IndexReader.Open (@ "MyIndex"); int N = rdr.MaxDoc(); para (int n = 0; n Mikos

Cuestiones relacionadas