2010-04-14 10 views
5

Tworzę tagging system for my siteJak usunąć/zaktualizować dokument z lucene?

mam podstaw dodawania dokumentu do Lucene ale wydaje się dowiedzieć się, jak usunąć dokument lub zaktualizować jedną, gdy użytkownik zmieni tagów czegoś. Znalazłem strony, które mówią, korzystają z indeksu dokumentów i muszę zoptymalizować przed efektem, ale jak mogę uzyskać indeks dokumentów? Widziałem także inny, który powiedział, że należy użyć IndexWriter, aby usunąć, ale nie mogłem dowiedzieć się, jak to zrobić z tym albo.

Używam C# ASP.NET i nie mam java zainstalować na tym komputerze

Odpowiedz

10

Jaką wersję Lucene używasz? Klasa IndexWriter ma metodę aktualizacji, która umożliwia aktualizację (BTW, aktualizacja pod maską to tak naprawdę usuwanie, a następnie dodanie). Będziesz potrzebował jakiegoś identyfikatora (takiego jak identyfikator dokumentu), który umożliwi aktualizację. Podczas indeksowania dokumentu dodaj unikalny identyfikator dokumentu, taki jak adres URL, licznik itp. Następnie "Term" będzie identyfikatorem dokumentu, który chcesz zaktualizować. Na przykład za pomocą adresu URL można aktualizować w ten sposób:

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

Inkubowanie-Apache-Lucene.Net-2.0-004-11Mar07.bin.zip. Więc może lucene 2.0. –

+0

Yikes, właśnie zdałem sobie sprawę z tej daty. Znalazłem tag svn za pomocą Lucene.Net_2_9_1 –

+0

Po prostu jestem jasny. Doc to nowy dokument wypełniony żądanymi danymi. Termin jest identyfikatorem starego dokumentu, który chcę zaktualizować/wymienić? -edit- update wygląda jak DeleteAdd. doc nie musi posiadać tego samego identyfikatora lub terminu co starszy. –

3

potrzebujesz IndexReader usunąć dokument, nie jestem pewien co do wersji .net ale Java i C++ wersjach Interfejs API Lucene ma klasę IndexModifier, która ukrywa różnice między klasami IndexReader i IndexWriter i po prostu używa odpowiedniej klasy podczas wywoływania addDocument() i removeDocument().

Ponadto, nie ma potrzeby aktualizacji dokumentu w Lucene, musisz go usunąć, a następnie ponownie dodać. Aby to zrobić, musisz upewnić się, że każdy dokument ma unikalny zapisany identyfikator w indeksie.

+0

świetnie wiedzieć o aktualizacjach. Nie widzę removeDocument ani IndexModifier (może .net używa starszej wersji lucene). Widzę DeleteDocument w IndexReader. Akceptuje "int docNum". Nie mam pojęcia, co z tym zrobić. Tam nie ma dokumentu ani dokumentu w dokumencie –

+1

dokumentacja jest kluczem wyliczającym, na przykład IndexReader rdr = IndexReader.Open (@ "Myindex"); int N = rdr.MaxDoc(); dla (int n = 0; n Mikos