Wie mit sehr häufigen updates zu einem Lucene-index

Ich versuche, einen Prototyp für eine Indizierung/Suche-Anwendung, die sehr volatil die Indizierung der Daten-Quellen (Foren, soziale Netzwerke etc.), hier sind einige der performance-Anforderungen,

  1. Sehr schnelle turn-around-Zeit (damit meine ich, dass keine neuen Daten (z.B. eine neue Nachricht in einem forum) sollte in den Suchergebnissen sehr schnell (weniger als eine minute))

  2. Muss ich das verwerfen von alten Dokumenten auf einer ziemlich regelmäßigen basis, um sicherzustellen, dass die Ergebnisse der Suche sind nicht datiert.

  3. Nicht zuletzt die Suche der Anwendung Bedürfnisse zu reagieren. (Latenz in der Größenordnung von 100 Millisekunden, und sollte mindestens 10 qps)

Alle Anforderungen, die ich habe, die derzeit erfüllt werden können w/o using Lucene (und das würde mir genügen alle 1,2 und 3), aber ich bin Antizipation andere Anforderungen in der Zukunft (wie Suche, Relevanz etc.), die Lucene erleichtert die Umsetzung. Jedoch, da Lucene ist konzipiert für den Einsatz Fällen weitaus komplexer ist, als die, die ich gerade auf Arbeit bin, bin ich eine harte Zeit, befriedigend, meine Leistung Anforderungen.

Hier sind einige Fragen,

ein. Ich habe gelesen, dass die optimize () - Methode in der IndexWriter-Klasse ist teuer, und sollte nicht verwendet werden, die von Anwendungen, die häufigen updates, was sind die alternativen?

b. Um inkrementelle updates, die ich brauche zu halten, Begehen die neuen Daten, und halten die Aktualisierung der index-reader, um sicherzustellen, dass es die neuen Daten zur Verfügung. Diese sind auf 1 und 3 oben. Sollte ich versuchen, doppelte Indizes? Was sind einige gemeinsame Ansätze zur Lösung dieses Problems?

c. Ich weiß, dass Lucene bietet eine delete-Methode, die es erlaubt, Sie zu löschen Sie alle Dokumente, die die übereinstimmung eines bestimmten Abfrage, in meinem Fall, ich brauche, um zu löschen Sie alle Dokumente, die älter als ein bestimmtes Alter, jetzt eine option ist das hinzufügen von ein Datum-Feld für jedes Dokument, und verwenden, löschen Sie die Dokumente später. Ist es möglich zu tun range-queries auf Dokumenten-ids (ich kann mein eigenes id-Feld, da ich denke, dass bei lucene hält zu ändern), Dokumente zu löschen? Ist es nicht schneller, als Vergleich von Datumsangaben als Zeichenketten?

Ich weiß, das sind sehr offene Fragen, also ich bin nicht auf der Suche für eine ausführliche Antwort, ich werde versuchen, behandeln Sie alle Ihre Antworten, Anregungen und nutzen Sie, um zu informieren, mein design. Danke! Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

InformationsquelleAutor fsm | 2010-09-30
Schreibe einen Kommentar