Frage

Ich laufe derzeit Lucene.net in einer Web-Anwendung und frage mich, über die beste Methode, Performance-weise.

Ich habe es zur Zeit so einrichten, dass alle Indices zusammen in einem geplanten Prozess erhalten verarbeitet schreiben, zusammen mit dem Index zu optimieren.

Doch für die Suche - ich zur Zeit öffnen und den Sucher zur Suche zu schließen, was ich weiß, ist nicht ideal

.

Was denken Sie ist der beste Ansatz in dieser Situation wäre?

Ich brauche den Index Sucher zu schließen und wieder öffnen, sobald die Updates / Optimierung verarbeitet wird, so dass der geplante Prozess (die eine Windows-Konsole App ist) es fertig kommunizieren muß, um die Web-Anwendung.

War es hilfreich?

Lösung

Ich habe gerade integriert Lucene.NET in BugTracker.NET. Ich bin nicht sicher, dass das, was ich tat das Beste ist, aber es scheint gut zu funktionieren.

Ich schaffe den Index bei App-Start.

Ich schaffe einen Sucher und halten Sie sie um, so dass der Index nicht bei jeder Suche neu geladen wird. Alle Threads teilen sich die gleiche Sucher. Wenn der Sucher sucht, greift es eine Sperre.

Mittlerweile habe ich einen Indexwriter, der den Index aktualisiert, wenn eine Datenänderung ist. Es ändert sich nur ein wenig, damit es seine Aufgabe schnell der Fall ist. Wenn es läuft, packt er die gleiche Schloss, zerstört den Sucher, aktualisiert den Index und die Wieder erstellt den Sucher. Der neue Sucher bleibt bis zur nächsten Aktualisierung des Index um. Der Sucher immer arbeitet mit einem up-to-date-Index.

Sie können die BugTracker.NET Quelle erhalten und die Dateien my_lucene.cs und search_text.aspx betrachten. Es ist alles in diesen beiden Dateien, und es gibt nicht so viel Code.

Andere Tipps

Sie könnten an den Leser IsCurrent () -Methode aufrufen, um zu überprüfen, ob eine neue Version des Index verfügbar ist, und wenn es dann wieder öffnen. Könnte nicht der beste Weg sein, aber es ist einfach genug, und wenn Ihre Anforderungen nicht sehr groß sind, wird es ausreichend sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top