it-swarm.com.de

Vergleich der Volltextsuchmaschine - Lucene, Sphinx, Postgresql, MySQL?

Ich baue eine Django Site und suche eine Suchmaschine.

Einige Kandidaten:

  • Lucene/Lucene mit Kompass/Solr

  • Sphinx

  • Postgresql integrierte Volltextsuche

  • Integrierte MySQl-Volltextsuche

Auswahlkriterium:

  • ergebnisrelevanz und Ranking
  • such- und Indizierungsgeschwindigkeit
  • benutzerfreundlichkeit und einfache Integration in Django
  • ressourcenanforderungen - Die Site wird auf einem VPS gehostet, daher würde die Suchmaschine im Idealfall nicht viel RAM) benötigen und CPU
  • skalierbarkeit
  • zusätzliche Funktionen wie "Meinten Sie?", verwandte Suchen usw

Jeder, der Erfahrung mit den oben genannten Suchmaschinen oder anderen nicht in der Liste aufgeführten Suchmaschinen hat - ich würde mich über Ihre Meinung freuen.

BEARBEITEN: In Bezug auf die Indizierungsanforderungen müssten diese Daten kontinuierlich indiziert werden, da Benutzer weiterhin Daten in die Site eingeben. Es muss keine Echtzeit sein, aber im Idealfall werden neue Daten im Index mit einer Verzögerung von nicht mehr als 15 bis 30 Minuten angezeigt

304
Continuation

Es ist gut zu sehen, dass sich jemand für Lucene interessiert - weil ich keine Ahnung davon habe.

Sphinx andererseits weiß ich recht gut, also wollen wir mal sehen, ob ich etwas helfen kann.

  • Ergebnisrelevanz-Ranking ist die Standardeinstellung. Sie können nach Belieben eine eigene Sortierung einrichten und bestimmten Feldern eine höhere Gewichtung geben.
  • Die Indizierungsgeschwindigkeit ist superschnell, da sie direkt mit der Datenbank kommuniziert. Jede Langsamkeit wird von komplexen SQL-Abfragen und nicht indizierten Fremdschlüsseln und anderen derartigen Problemen herrühren. Ich habe auch keine Langsamkeit bei der Suche bemerkt.
  • Ich bin ein Rails Typ, daher weiß ich nicht, wie einfach es ist, mit Django zu implementieren. Es gibt eine Python API, die mit der Sphinx geliefert wird Quelle aber.
  • Der Suchdienst-Daemon (searchd) ist sehr speicherarm - und Sie können Grenzen setzen für wie viel Speicher auch der Indexer-Prozess verwendet.
  • In Bezug auf Skalierbarkeit ist mein Wissen eher lückenhaft - aber es ist einfach genug, Indexdateien auf mehrere Computer zu kopieren und mehrere durchsuchte Daemons auszuführen. Der allgemeine Eindruck, den ich von anderen bekomme, ist, dass es unter hoher Last verdammt gut ist. Es ist also nichts, was man tun muss, um es auf mehrere Maschinen zu skalieren.
  • Es gibt keine Unterstützung für "Did-You-Mean" usw. - obwohl dies mit anderen Tools problemlos möglich ist. Sphinx verwendet zwar Wörterbücher, um Wortstämme zu erstellen, daher würden "Fahren" und "Fahren" (zum Beispiel) bei der Suche als gleich angesehen.
  • Sphinx erlaubt jedoch keine teilweisen Indexaktualisierungen für Felddaten. Der übliche Ansatz besteht darin, einen Delta-Index mit allen kürzlich vorgenommenen Änderungen zu führen und diesen nach jeder Änderung neu zu indizieren (und diese neuen Ergebnisse erscheinen innerhalb von ein oder zwei Sekunden). Aufgrund der geringen Datenmenge kann dies einige Sekunden dauern. Sie müssen den Hauptdatensatz dennoch regelmäßig neu indizieren (obwohl die Häufigkeit der Indizierung von der Volatilität Ihrer Daten abhängt - jeden Tag, jede Stunde?). Die schnellen Indizierungsgeschwindigkeiten machen dies alles jedoch ziemlich schmerzlos.

Ich habe keine Ahnung, wie dies auf Ihre Situation zutrifft, aber Evan Weaver verglich einige der gebräuchlichen Rails Suchoptionen (Sphinx, Ferret (ein Hafen von Lucene) für Ruby) und Solr) einige Benchmarks. Könnte nützlich sein, denke ich.

Ich habe die Tiefen der MySQL-Volltextsuche noch nicht erforscht, aber ich weiß, dass sie in Bezug auf Geschwindigkeit und Funktionen nicht mit Sphinx, Lucene oder Solr konkurriert.

164
pat

Ich kenne Sphinx nicht, aber was Lucene gegen eine Datenbank-Volltextsuche betrifft, denke ich, dass die Leistung von Lucene unübertroffen ist. Sie sollten in der Lage sein, fast any in weniger als 10 ms zu suchen, unabhängig davon, wie viele Datensätze Sie durchsuchen müssen, vorausgesetzt, Sie haben Ihren Lucene-Index korrekt eingerichtet.

Hier ist die größte Hürde: Ich persönlich denke, dass es nicht einfach ist, Lucene in Ihr Projekt zu integrieren einfach. Sicher, es ist nicht allzu schwer, es so einzurichten, dass Sie eine einfache Suche durchführen können. Wenn Sie jedoch das Beste daraus machen möchten und dabei eine optimale Leistung erzielen möchten, brauchen Sie auf jeden Fall ein gutes Buch über Lucene.

Was die CPU & RAM Anforderungen anbelangt, wird Ihre CPU bei einer Suche in Lucene nicht überlastet, obwohl Ihre Daten indiziert werden, obwohl Sie dies nicht zu oft tun (vielleicht ein- oder zweimal) ein Tag), das ist also keine große Hürde.

Es beantwortet nicht alle Ihre Fragen, aber kurz gesagt, wenn Sie eine Menge Daten durchsuchen müssen und eine hervorragende Leistung erzielen möchten, ist Lucene auf jeden Fall der richtige Weg. Wenn Sie nicht so viele Daten durchsuchen müssen, können Sie auch eine Datenbank-Volltextsuche durchführen. Das Einrichten einer MySQL-Volltextsuche ist in meinem Buch definitiv einfacher.

82
Razzie

Ich bin überrascht, dass über Solr keine weiteren Informationen gepostet wurden. Solr ist Sphinx ziemlich ähnlich, hat aber erweiterte Funktionen (AFAIK, da ich Sphinx nicht verwendet habe - lies nur darüber).

Die Antwort auf den folgenden Link enthält einige Details zu Sphinx, die auch für Solr gelten. Vergleich der Volltextsuchmaschine - Lucene, Sphinx, Postgresql, MySQL?

Solr bietet außerdem die folgenden zusätzlichen Funktionen:

  1. Unterstützt die Replikation
  2. Mehrere Kerne (stellen Sie sich diese als separate Datenbanken mit eigener Konfiguration und eigenen Indizes vor)
  3. Boolesche Suchen
  4. Hervorheben von Schlüsselwörtern (im Anwendungscode ziemlich einfach, wenn Sie über Regex-Fu verfügen; lassen Sie sich jedoch von einem spezialisierten Tool besser unterstützen)
  5. Index über XML oder begrenzte Datei aktualisieren
  6. Kommunikation mit dem Suchserver über HTTP (es kann sogar Json, natives PHP/Ruby/Python zurückgeben)
  7. PDF, Indexierung von Word-Dokumenten
  8. Dynamische Felder
  9. Facetten
  10. Aggregierte Felder
  11. Stoppwörter, Synonyme usw.
  12. Mehr wie das...
  13. Indizieren Sie direkt aus der Datenbank mit benutzerdefinierten Abfragen
  14. Automatisch vorschlagen
  15. Cache Autowarming
  16. Schnelle Indizierung (im Vergleich zu den Indizierungszeiten für die MySQL-Volltextsuche) - Lucene verwendet ein binär invertiertes Indexformat.
  17. Boosting (benutzerdefinierte Regeln zur Erhöhung der Relevanz eines bestimmten Keywords oder Ausdrucks usw.)
  18. Feldsuchen (wenn ein Suchbenutzer das zu suchende Feld kennt, schränkt er seine Suche ein, indem er das Feld, dann den Wert und NUR dieses Feld anstelle von allem eingibt - viel bessere Benutzererfahrung)

Übrigens gibt es Tonnen mehr Funktionen; Ich habe jedoch nur die Funktionen aufgelistet, die ich tatsächlich in der Produktion verwendet habe. Übrigens: MySQL unterstützt standardmäßig die in der obigen Liste aufgeführten Optionen 1, 3 und 11 (eingeschränkt). Für die Funktionen, nach denen Sie suchen, ist eine relationale Datenbank nicht geeignet. Ich würde diese sofort beseitigen.

Ein weiterer Vorteil ist, dass Solr (nun ja, Lucene) eine Dokumentendatenbank (z. B. NoSQL) ist, sodass viele der Vorteile einer anderen Dokumentendatenbank mit Solr realisiert werden können. Mit anderen Worten, Sie können es nicht nur für die Suche verwenden (d. H. Für die Leistung). Sei kreativ damit :)

60
Wil Moore III

Apache Solr


Lassen Sie mich neben der Beantwortung der Fragen von OP einige Einblicke in Apache Solr von einfache Einführung werfen zu detaillierte Installation und Implementierung .

Einfache Einführung


Jeder, der Erfahrung mit den oben genannten Suchmaschinen oder anderen nicht in der Liste aufgeführten Suchmaschinen hat - ich würde gerne Ihre Meinung hören.

Solr sollte nicht zur Lösung von Echtzeitproblemen verwendet werden. Für Suchmaschinen ist Solr so ziemlich ein Spiel und funktioniert einwandfrei.

Solr funktioniert gut bei High Traffic Web-Anwendungen ( Ich habe irgendwo gelesen, dass es nicht dafür geeignet ist, aber ich unterstütze diese Aussage) . Es nutzt den RAM, nicht die CPU.

  • ergebnisrelevanz und Ranking

Mit boost können Sie Ihre Ergebnisse ganz oben platzieren. Angenommen, Sie suchen nach einem Namen john in den Feldern Vorname und Nachname, und Sie möchten Geben Sie dem Feld Vorname Relevanz, dann müssen Sie boost das Feld Vorname wie gezeigt nach oben verschieben.

http://localhost:8983/solr/collection1/select?q=firstname:john^2&lastname:john

Wie Sie sehen können, ist Vorname Feld erhöht mit einer Punktzahl von 2.

Mehr zu SolrRelevancy

  • such- und Indizierungsgeschwindigkeit

Die Geschwindigkeit ist unglaublich schnell und keine Kompromisse. Der Grund, warum ich zu Solr gezogen bin.

In Bezug auf die Indexierungsgeschwindigkeit kann Solr auch [~ # ~] Joins [~ # ~] aus Ihren Datenbanktabellen verarbeiten. Ein höherer und komplexer [~ # ~] Join [~ # ~] beeinflusst die Indizierungsgeschwindigkeit. Eine enorme Konfiguration von [~ # ~] ram [~ # ~] kann diese Situation jedoch problemlos bewältigen.

Je höher der RAM, desto schneller ist die Indizierungsgeschwindigkeit von Solr.

  • benutzerfreundlichkeit und einfache Integration in Django

Nie versucht, Solr und Django zu integrieren, aber Sie können dies mit Haystack erreichen. Ich fand einige interessante Artikel auf dem gleichen und hier ist das Github dafür.

  • ressourcenanforderungen - Die Site wird auf einem VPS gehostet, sodass die Suchmaschine im Idealfall nicht viel RAM und CPU benötigt

Solr brütet im RAM. Wenn also RAM hoch ist, müssen Sie sich keine Sorgen um Solr = machen.

Solr's RAM Verwendung steigt bei vollständiger Indizierung Wenn Sie über mehrere Milliarden Datensätze verfügen, können Sie Delta-Importe intelligent einsetzen, um diese Situation zu lösen. Wie bereits erläutert, ist Solr nur eine Lösung in Echtzeit.

  • skalierbarkeit

Solr ist hoch skalierbar. Schauen Sie sich SolrCloud an. Einige Hauptmerkmale davon.

  • Shards (oder Sharding ist das Konzept zum Verteilen des Index auf mehrere Computer, z. B. wenn Ihr Index zu groß geworden ist)
  • Load Balancing (wenn Solrj in der Solr-Cloud verwendet wird, übernimmt es automatisch das Load Balancing mithilfe des Round-Robin-Mechanismus)
  • Verteilte Suche
  • Hohe Verfügbarkeit
  • zusätzliche Funktionen wie "Meinten Sie?", verwandte Suchanfragen usw

Für das obige Szenario können Sie SpellCheckComponent verwenden, das mit Solr gepackt ist. Es gibt noch viele andere Funktionen. Mit der SnowballPorterFilterFactory können Sie Datensätze abrufen, die Sie eingeben. books statt book Präsentiert werden mit Ergebnissen im Zusammenhang mit Buch.


Diese Antwort konzentriert sich hauptsächlich auf Apache Solr & MySQL . Django liegt außerhalb des Gültigkeitsbereichs.

Unter der Annahme, dass Sie sich in einer Linux-Umgebung befinden, können Sie mit diesem Artikel fortfahren. (meins war eine Ubuntu 14.04 Version)

Detaillierte Installation

Anfangen

Laden Sie Apache Solr von hier herunter. Das wäre die Version 4.8.1 . Du könntest neue Versionen herunterladen, ich fand diesen Stall.

Extrahieren Sie das Archiv nach dem Herunterladen in einen Ordner Ihrer Wahl. Sagen Sie .. Downloads oder was auch immer .. So wird es aussehen wie Downloads/solr-4.8.1/

An Ihrer Eingabeaufforderung. Navigieren Sie im Verzeichnis

[email protected]: cd Downloads/solr-4.8.1

Also jetzt bist du hier ..

[email protected]: ~/Downloads/solr-4.8.1$

Starten Sie den Jetty Application Server

Jetty ist im Beispielordner des Verzeichnisses solr-4.8.1 Verfügbar. Navigieren Sie also in diesem Ordner und starten Sie den Jetty Application Server.

[email protected]:~/Downloads/solr-4.8.1/example$ Java -jar start.jar

Schließen Sie das Terminal jetzt nicht, minimieren Sie es und lassen Sie es beiseite.

(TIPP: Verwenden Sie & nach start.jar, damit der Jetty Server im Hintergrund ausgeführt wird.)

Um zu überprüfen, ob Apache Solr erfolgreich ausgeführt wird, rufen Sie diese URL im Browser auf. http: // localhost: 8983/solr

Laufen Jetty auf benutzerdefinierten Port

Es wird standardmäßig auf dem Port 8983 ausgeführt. Sie können den Port entweder hier oder direkt in der Datei jetty.xml Ändern.

Java -Djetty.port=9091 -jar start.jar

Laden Sie den JConnector herunter

Diese JAR-Datei fungiert als Brücke zwischen MySQL und JDBC. Laden Sie die plattformunabhängige Version herunter hier

Extrahieren Sie nach dem Herunterladen den Ordner, kopieren Sie den mysql-connector-Java-5.1.31-bin.jar Und fügen Sie ihn in das Verzeichnis lib ein.

[email protected]:~/Downloads/solr-4.8.1/contrib/dataimporthandler/lib

Erstellen der MySQL-Tabelle, die mit Apache Solr verknüpft werden soll

Um Solr verwenden zu können, müssen Sie einige Tabellen und Daten zum Suchen haben. Dafür verwenden wir MySQL , um eine Tabelle zu erstellen und einige zufällige Namen zu pushen, und dann könnten wir Solr verwenden, um eine Verbindung zu = herzustellen MySQL und indexiere diese Tabelle und ihre Einträge.

1. Tabellenstruktur

CREATE TABLE test_solr_mysql
 (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  name VARCHAR(45) NULL,
  created TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id)
 );

2.Füllen Sie die obige Tabelle aus

INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jean');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jack');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jason');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Vego');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Grunt');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jasper');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Fred');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jenna');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Rebecca');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Roland');

Ins Innere des Kerns gelangen und die lib-Direktiven hinzufügen

1.Navigieren Sie zu

[email protected]: ~/Downloads/solr-4.8.1/example/solr/collection1/conf

2.Änderung der solrconfig.xml

Fügen Sie dieser Datei diese beiden Anweisungen hinzu.

  <lib dir="../../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
  <lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" />

Fügen Sie nun den [~ # ~] dih [~ # ~] (Datenimport-Handler) hinzu.

<requestHandler name="/dataimport" 
  class="org.Apache.solr.handler.dataimport.DataImportHandler" >
    <lst name="defaults">
      <str name="config">db-data-config.xml</str>
    </lst>
</requestHandler>

3.Erstellen Sie die Datei db-data-config.xml

Wenn die Datei vorhanden ist, ignorieren Sie diese und fügen Sie diese Zeilen der Datei hinzu. Wie Sie in der ersten Zeile sehen können, müssen Sie die Anmeldeinformationen Ihrer Datenbank MySQL angeben. Der Datenbankname, Benutzername und Passwort.

<dataConfig>
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/yourdbname" user="dbuser" password="dbpass"/>
    <document>
   <entity name="test_solr" query="select CONCAT('test_solr-',id) as rid,name from test_solr_mysql WHERE '${dataimporter.request.clean}' != 'false'
      OR `created` > '${dataimporter.last_index_time}'" >
    <field name="id" column="rid" />
    <field name="solr_name" column="name" />
    </entity>
   </document>
</dataConfig>

(TIPP: Sie können eine beliebige Anzahl von Entitäten haben, achten Sie jedoch auf das Feld id. Wenn diese identisch sind, wird die Indizierung übersprungen.)

4.Ändern Sie die Datei schema.xml

Fügen Sie dies wie gezeigt zu Ihrem schema.xml hinzu.

<uniqueKey>id</uniqueKey>
<field name="solr_name" type="string" indexed="true" stored="true" />

Implementierung

Indizierung

Hier ist das eigentliche Geschäft. Sie müssen die Indizierung von Daten von MySQL bis Solr durchführen, um Solr-Abfragen verwenden zu können.

Schritt 1: Gehen Sie zu Solr Admin Panel

Drücken Sie die URL http: // localhost: 8983/solr in Ihrem Browser. Der Bildschirm öffnet sich wie folgt.

This is the main Apache Solr Administration Panel

Wie die Markierung anzeigt, gehen Sie zu Logging , um zu überprüfen, ob eine der obigen Konfigurationen zu Fehlern geführt hat.

Schritt 2: Überprüfen Sie Ihre Protokolle

Ok, jetzt bist du hier. Wie du kannst, gibt es eine Menge gelber Nachrichten (WARNUNGEN). Stellen Sie sicher, dass Sie keine rot markierten Fehlermeldungen haben. Zuvor hatten wir in unserer Konfiguration eine Auswahlabfrage in unserer Datei db-data-config.xml hinzugefügt. Sagen Sie, wenn diese Abfrage Fehler enthält, wäre sie hier angezeigt worden.

This is the logging section of your Apache Solr engine

Gut, keine Fehler. Wir sind gut zu gehen. Wählen wir aus der angezeigten Liste collection1 und wählen Dataimport

Schritt 3: DIH (Data Import Handler)

Mit dem DIH verbinden Sie sich mit MySQL von Solr über die Konfigurationsdatei db-data- config.xml von der Schnittstelle Solr abrufen und die 10 Datensätze aus der Datenbank abrufen, die auf Solr indexiert wird .

Wählen Sie dazu full-import und aktivieren Sie die Optionen Clean und Commit. Klicken Sie nun wie gezeigt auf Execute .

Alternativ können Sie auch eine direkte full-import Abfrage wie diese verwenden.

http://localhost:8983/solr/collection1/dataimport?command=full-import&commit=true

The Data Import Handler

Nachdem Sie auf Execute geklickt haben, beginnt Solr mit der Indizierung der Datensätze. Wenn Fehler auftreten, wird ) angezeigt + Indizierung fehlgeschlagen und Sie müssen zum Abschnitt Logging zurückkehren, um festzustellen, was schief gelaufen ist.

Vorausgesetzt, es gibt keine Fehler bei dieser Konfiguration und wenn die Indizierung erfolgreich abgeschlossen wurde, erhalten Sie diese Benachrichtigung.

Indexing Success

Schritt 4: Ausführen von Solr-Abfragen

Scheint, als ob alles gut gelaufen ist. Jetzt können Sie Solr Abfragen verwenden, um die indizierten Daten abzufragen. Klicken Sie links auf Query und dann unten auf Execute .

Sie sehen die indizierten Datensätze wie gezeigt.

Die entsprechende Solr Abfrage zum Auflisten aller Datensätze lautet

http://localhost:8983/solr/collection1/select?q=*:*&wt=json&indent=true

The indexed data

Nun, es gibt alle 10 indizierten Datensätze. Angenommen, wir brauchen nur Namen, die mit Ja beginnen. In diesem Fall müssen Sie den Spaltennamen solr_name Als Ziel angeben. Daher sieht Ihre Abfrage folgendermaßen aus.

http://localhost:8983/solr/collection1/select?q=solr_name:Ja*&wt=json&indent=true

The JSON data starting with Ja*

So schreiben Sie Solr Abfragen. Um mehr darüber zu lesen, überprüfen Sie diese schöne Artikel .

57

Ich schaue mir gerade die PostgreSQL-Volltextsuche an. Sie bietet die richtigen Funktionen einer modernen Suchmaschine, einen wirklich guten erweiterten Charakter und mehrsprachige Unterstützung. Die Integration in Textfelder in der Datenbank ist sehr eng.

Aber es gibt keine benutzerfreundlichen Suchoperatoren wie + oder AND (verwendet & |!) Und ich bin nicht begeistert, wie es auf ihrer Dokumentationsseite funktioniert. In den Ergebnis-Snippets sind Übereinstimmungsbegriffe fett gedruckt, der Standardalgorithmus, für den Übereinstimmungsbegriffe verwendet werden, ist jedoch nicht besonders gut. Wenn Sie RTF, PDF, MS Office indizieren möchten, müssen Sie einen Dateiformatkonverter finden und integrieren.

OTOH, es ist viel besser als die MySQL-Textsuche, die nicht einmal Wörter mit drei oder weniger Buchstaben indiziert. Dies ist die Standardeinstellung für die MediaWiki-Suche, und ich denke wirklich, dass dies für Endbenutzer nicht gut ist: http://www.searchtools.com/analysis/mediawiki-search/

In allen Fällen, die ich gesehen habe, sind Lucene/Solr und Sphinx wirklich großartig . Sie sind solider Code und haben sich mit erheblichen Verbesserungen in der Benutzerfreundlichkeit weiterentwickelt. Daher sind alle Tools vorhanden, um eine Suche zu ermöglichen, die nahezu jeden zufriedenstellt.

für SHAILI - SOLR enthält die Lucene-Suchcodebibliothek und verfügt über die Komponenten, um eine eigenständige Suchmaschine von Nice zu sein.

28
SearchTools-Avi

Nur meine zwei Cent auf diese sehr alte Frage. Ich würde wärmstens empfehlen, sich ElasticSearch anzuschauen.

Elasticsearch ist ein auf Lucene basierender Suchserver. Es bietet eine verteilte, mandantenfähige Volltextsuchmaschine mit einer RESTful-Weboberfläche und schemafreien JSON-Dokumenten. Elasticsearch wurde in Java) entwickelt und wird unter den Bedingungen der Apache-Lizenz als Open Source veröffentlicht.

Die Vorteile gegenüber anderen FTS-Engines (Volltextsuche) sind:

  • RESTful-Schnittstelle
  • Bessere Skalierbarkeit
  • Große Community
  • Von Lucene-Entwicklern erstellt
  • Umfangreiche Dokumentation
  • Es gibt viele Open-Source-Bibliotheken (einschließlich Django)

Wir benutzen diese Suchmaschine in unserem Projekt und sind sehr zufrieden damit.

22
vooD

SearchTools-Avi sagte: "MySQL-Textsuche, die nicht einmal Wörter mit drei Buchstaben oder weniger indiziert."

Zu Ihrer Information, der MySQL-Volltext ist in der minimalen Wortlänge einstellbar seit mindestens MySQL 5.0. Google 'MySQL Volltext min Länge' für einfache Anweisungen.

Der MySQL-Volltext hat jedoch einige Einschränkungen: Zum einen wird die Aktualisierung langsam, sobald Sie etwa eine Million Datensätze erreicht haben.

10
BJ.

Ich würde mnoGoSearch zur Liste hinzufügen. Extrem performante und flexible Lösung, die als Google funktioniert: Indexer ruft Daten von mehreren Websites ab. Sie können grundlegende Kriterien verwenden oder Ihre eigenen Hooks erfinden, um eine maximale Suchqualität zu erzielen. Außerdem könnten die Daten direkt aus der Datenbank abgerufen werden.

Die Lösung ist heute noch nicht so bekannt, erfüllt aber die höchsten Anforderungen. Sie können es kompilieren und installieren, auf einem eigenständigen Server oder sogar auf Ihrem Prinzipalserver. Es benötigt nicht so viele Ressourcen wie Solr, da es in C geschrieben ist und sogar auf kleinen Servern einwandfrei ausgeführt wird.

Am Anfang müssen Sie es selbst kompilieren, daher sind einige Kenntnisse erforderlich. Ich habe ein winziges Skript für Debian erstellt, das helfen könnte. Anpassungen sind willkommen.

Als Sie Django Framework verwenden, könnten Sie oder PHP Client in der Mitte oder eine Lösung in Python finden, ich sah einigeArtikel .

Und natürlich ist mnoGoSearch Open Source, GNU GPL.

2
Fedir RYKHTIK