2009-06-16 18 views

Antwort

18

Wenn Sie mit Lucene arbeiten, würde ich ein gutes Buch kaufen, das es von A bis Z abdeckt. Lucene hat eine sehr steile Lernkurve (meiner Meinung nach). Es ist nicht nur zu wissen, wie zu Suche Ihr ist wichtig - es ist auch über Indizierung es. Eine einfache Suche ist einfach, aber es ist möglich, einen Index zu erstellen, der aus Millionen von Datensätzen besteht und trotzdem eine blitzschnelle Suche durchführen kann. Es gibt kein Tutorial, das dir das beibringt.

Ich würde Lucene in Action, Second Edition von Michael McCandless, Erik Hatcher und Otis Gospodnetić empfehlen. Obwohl es für Lucene und nicht für Lucene.NET geschrieben wurde, sollte das kein Problem sein, da die Termonologie und APIs im Grunde die gleichen sind.

Wenn Sie es jedoch nur kurz versuchen, können Sie this site lesen. Der Name sagt alles :-)

+1

Ich habe die Lucene in Action Buch zu überprüfen und ich muss zustimmen, dass es ein guter einzelner Foliant ist, um alle Dinge Lucene zu lernen! Die meisten theoretischen Konzepte beziehen sich auf Lucene.NET, jedoch erfordern Code-Implementierungen etwas kreatives Denken! –

+1

Ich sehe die 2. Ausgabe von Lucene in Action gerade herausgekommen ist. Irgendwelche Gedanken darüber, ob das näher oder weiter zu Lucene.NET dann die erste Ausgabe ist? –

9

Wir verwenden häufig Lucene.NET, wenn die Daten riesig sind und super schnelle Antwortzeiten für das Lesen benötigt werden. In der Regel stecken wir die Daten, die wir suchen müssen, sowie den Schlüssel, damit wir unsere Ergebnisse in der Datenbanktabelle mit den verbleibenden Details abbilden können. Dies ermöglicht uns dann, nach einem Benutzer (in unserem Fall) zu suchen, der nach seiner vergangenen Teilnahme sucht. Dies ist nicht nur eine Nutzernamensuche, sondern eine Suche, die über verschiedene Details iteriert, um herauszufinden, ob es weitere Instanzen dieses Benutzers gibt (wenn auch in einer anderen Form). Ein Beispiel hierfür ist die Benutzer-ID (von einem System), ihre ID von einem anderen System, vielleicht eine ID von einem Lieferantensystem, eine Flash-Cookie-GUID, eine Site-Cookie-GUID usw. Und da wir einen Bezeichner finden Suchen Sie nach anderen Instanzen dieser ID für andere Instanzen von Benutzern. Dies ermöglicht es uns, den Benutzereintrag in eines von vielen Systemen zu deduplizieren (da ihre Teilnahme an jedem System nur einmal pro 24 Stunden erlaubt ist). In SQL würde dieser Alogrithm (über den ich vage war) ewig dauern! In Lucene.NET dauert es weniger als eine Sekunde. Lucene hat viel mehr Suchmöglichkeiten als SQL Server. Die Sache, an der es saugt, ist das Schreiben oder Aktualisieren Ihres Indexes. Dies wird normalerweise als Job gemacht ... auf einmal. Wenn Sie jedoch in den Index schreiben müssen, um ihn in Echtzeit zu aktualisieren, müssen Sie cleveren Code schreiben, um sicherzustellen, dass er in einer gesperrten Art und Weise geschrieben wird (denken Sie an Singleton) oder Ihr Code wird sich überlappen und explodieren!

Ich decken die Verwendung von Lucene.NET in meinem Buch (ASP.NET Social Networking) und Sie können viele Hilfe finden here.

1

Das Problem mit Lucene.NET ist, dass es nicht über eine aktive Community wie Standard hat (Java) Lucene - so ist es wie immer effektiv laufen eine alte Version von Lucene. Obwohl wir .NET bevorzugen, haben wir uns aus diesem Grund entschieden, die Java-Version von Lucene zu verwenden. Wenn Sie Solr ebenfalls verwenden, ist es sehr einfach zu integrieren.

1

"Lucene in Aktion" ist das beste Buch, um zu lernen, wie man indexiert und wie man sucht. Es deckt sogar die fortgeschrittenen Suchtechniken und das Schreiben von benutzerdefinierten Analysatoren ab. Obwohl das Buch für Java gedacht ist ... habe ich das Suchen und Indexieren in .net mit diesem Buch implementiert.

1

Simon Green hat eine schöne dreiteilige Serie darüber, wie er Lucene.Net eingerichtet hat, um mit seiner NHibernate-Implementierung zu arbeiten. Part one introduces the series. Part two und part three diskutieren die technischen Details.

Ich fand die Lucene.Net Code Beispiele sehr nützlich, auch wenn mein Projekt nicht NHibernate verwendet.