2010-04-14 4 views
5

Je crée une tagging system for my siteComment supprimer/mettre à jour un document avec lucene?

Je suis les bases de l'ajout d'un document à Lucene mais je ne peux pas à comprendre comment supprimer un document ou mettre à jour un lorsque l'utilisateur modifie les balises de quelque chose. J'ai trouvé des pages qui disent utiliser l'index de document et j'ai besoin d'optimiser avant l'effet mais comment puis-je obtenir l'index de document? Aussi j'ai vu un autre qui a dit d'utiliser IndexWriter pour supprimer, mais je ne pouvais pas comprendre comment le faire avec ça non plus.

J'utilise C# asp.net et je n'avez pas java installer sur cette machine

Répondre

10

Quelle version de Lucene utilisez-vous? La classe IndexWriter a une méthode de mise à jour qui vous permet de mettre à jour (BTW une mise à jour sous le capot est vraiment une suppression suivie d'un ajout). Vous aurez besoin d'avoir un identifiant (tel que l'identifiant du document) qui vous permet de mettre à jour. Lorsque vous indexez le document, ajoutez un identifiant de document unique tel qu'une URL, un compteur, etc. Ensuite, le terme «Term» sera l'identifiant du document que vous souhaitez mettre à jour. Par exemple en utilisant l'URL, vous pouvez mettre à jour ainsi:

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

Incubating-Apache-Lucene.Net-2.0-004-11Mar07.bin.zip. Alors peut-être lucene 2.0. –

+0

Yikes, je viens de réaliser la date. J'ai trouvé une balise svn en utilisant Lucene.Net_2_9_1 –

+0

Juste pour que je sois clair. Doc est le nouveau document rempli avec les données que je veux. Le terme est l'identifiant de l'ancien document que je veux mettre à jour/remplacer? -edit- update ressemble à un DeleteAdd. doc n'a pas besoin de contenir le même id ou terme que le plus ancien. –

3

Vous avez besoin d'un IndexReader supprimer un document, je ne suis pas sûr de la version .net, mais les versions Java et C++ de l'API Lucene a une classe IndexModifier qui cache les différences entre les classes IndexReader et IndexWriter et utilise simplement la classe appropriée comme vous appelez addDocument() et removeDocument().

Aussi, il n'y a pas de concept de mise à jour d'un document dans Lucene vous devez le supprimer et le rajouter à nouveau. Pour ce faire, vous devez vous assurer que chaque document possède un identifiant unique stocké dans l'index.

+0

bon à connaître des mises à jour. Je ne vois pas removeDocument ni IndexModifier (peut-être .net utilise une ancienne version de lucene). Je vois un DeleteDocument dans IndexReader. Il accepte 'int docNum'. Je n'ai aucune idée de ce qu'il faut faire avec. Il n'y a pas docNum ou docId dans le document –

+1

le docnum est la clé de l'énumérateur, par exemple IndexReader rdr = IndexReader.Open (@ "Myindex"); int N = rdr.MaxDoc(); pour (int n = 0; n Mikos

Questions connexes