Lucene oder Mysql Volltextsuche [geschlossen]

8

Heutzutage, wenn Sie ein Web- / Mobile-App-Projekt starten, in dem die Suche eine wichtige Variable sein wird. Ist es besser, von Anfang an mit Lucene zu arbeiten oder schnell eine MySQL-basierte Lösung einzusetzen und auf das Beste zu hoffen?

    
smaura777 25.07.2011, 18:21
quelle

3 Antworten

21

Ich hatte dieselbe Entscheidung im November 2010. Ich bin ein Freund von mysql und habe versucht, zuerst eine Suchanwendung auf mysql zu erstellen - was gut funktioniert ... ... und schnell (ich dachte, es wäre schnell): Suche in 200.000 Dokumenten (in nicht mehr als 2-3 Sekunden)

Ich habe es vermieden, Zeit mit Lucene / solr zu verbringen, weil ich diese Zeit gerne für die Entwicklung der Anwendung nutzen möchte. Und: Lucene war neu für mich ... Ich weiß nicht, ob es gut genug ist, ich weiß nicht, was es ist .... Schließlich: Sie können die Gewohnheiten eines Lebens nicht ändern.

Allerdings habe ich verschiedene Probleme mit der Fuzzy-Suche (was in mysql schwierig zu implementieren ist) oder "eher so" (die von scrat in einer Anwendung mit mysql oder einfach mit "mehr so" programmiert werden müssen) Solr-Funktion aus der Box). Schließlich steigt die Anzahl der Dokumente auf eine Million und mysql braucht jetzt mehr als 15 Sekunden, um in die Dokumente zu suchen.

Also habe ich beschlossen, mit Lucene zu beginnen und es fühlt sich an, als ob ich eine Tür zu einer neuen Welt öffnete. Viele Features (ich habe kaum Programm-Features) werden nun von Solr und Out-of-the-Box zur Verfügung gestellt. Die Volltextsuche ist viel, viel schneller: weniger als 50 ms in 1 Million Dokumenten, weniger als 1 ms, wenn es zwischengespeichert wird.

Die investierte Zeit hat sich also ausgezahlt.

Also, wenn Sie daran denken, eine Volltextsuche zu machen: Nehmen Sie Lucene, wenn Sie mehr als ein paar Daten haben. Übrigens: Ich benutze ein hybrides Konstrukt: Halten Sie die Daten in MySQL und Lucene ist nur ein Index mit (fast) keine gespeicherten Daten (um diesen Index klein und schnell zu halten).

    
The Bndr 26.07.2011 07:43
quelle
4

Allgemein gesagt, wenn Sie Volltextsuchen haben, werden Sie sicherlich Lucene oder sphinx + mysql (oder lucene + mysql, Speichern der indizierbaren Felder in Lucene und Rückgabe einer ID für eine MySQL-Zeile) benötigen. jeder von ihnen ist eine ausgezeichnete Wahl.

Wenn Sie "normale" Suchvorgänge ausführen (d. h. Ganzzahl- oder Zeichenspalten oder Datum), reicht mysql partitoning aus.

Sie müssen angeben, wonach Sie suchen werden. und wie oft du deine db reindexierst (wenn du viel neu indizieren willst, würde ich mit sphinx gehen)

    
marcelog 25.07.2011 19:06
quelle
1

Sie fragen, ob Sie mit Lucene oder MySQL gehen sollen. Aber Lucene ist eine Bibliothek und MySQL ist ein Server. Sie sollten wirklich zwischen SOLR Suchmaschine und MySQL entscheiden. In diesem Fall ist die richtige Antwort wahrscheinlich beides. Verwalten Sie alle Daten in MySQL. Führen Sie Prozesse aus, um regelmäßig geänderte Daten zu extrahieren, in das SOLR-Suchformat zu transformieren und in die Suchmaschine zu laden. Die Verwendung von SOLR ist viel einfacher als die direkte Verwendung von Lucene. Wenn Sie das Verhalten auf irgendeine Weise ändern müssen, können Sie weiterhin Plug-ins für SOLR schreiben, so dass die Flexibilität nicht verloren geht.

Aber es wäre der Kuss des Todes, um Daten mit SOLR zu verwalten. Der Zyklus von read-edit-update funktioniert hervorragend mit SQL dbs, aber es ist nicht das, worum es bei SOLR geht. SOLR ist eine schnelle flexible Textsuche. Sie können Bild-URLs in SOLR speichern, um die Suchergebnisse mit einem nicht indizierten Feld zu erstellen.

    
Michael Dillon 04.08.2011 06:10
quelle