Ich baue eine Django-Site auf und suche eine Suchmaschine.
Einige Kandidaten:
Lucene / Lucene mit Kompass / Solr
Sphinx
Integrierte Postgresql-Volltextsuche
In MySQl integrierte Volltextsuche
Auswahlkriterium:
- Ergebnisrelevanz und Ranking
- Such- und Indizierungsgeschwindigkeit
- Benutzerfreundlichkeit und einfache Integration in Django
- Ressourcenanforderungen - Die Site wird auf einem VPS gehostet , sodass die Suchmaschine im Idealfall nicht viel RAM und CPU benötigt
- Skalierbarkeit
- zusätzliche Funktionen wie "Meinten Sie?", verwandte Suchanfragen usw.
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.
BEARBEITEN: Wenn Benutzer weiterhin Daten in die Site eingeben, müssen diese Daten kontinuierlich indiziert werden. Es muss nicht in Echtzeit sein, aber im Idealfall werden neue Daten mit einer Verzögerung von nicht mehr als 15 bis 30 Minuten im Index angezeigt
mysql
postgresql
full-text-search
lucene
sphinx
Fortsetzung
quelle
quelle
Tsearch
unterstützt keine Phrasensuche. Es befindet sich jedoch auf der TODO-Liste sai.msu.su/~megera/wiki/FTS_Todo .Antworten:
Gut zu sehen, dass sich jemand für Lucene engagiert - weil ich keine Ahnung davon habe.
Sphinx hingegen weiß ich ganz genau, also mal sehen, ob ich Ihnen helfen kann.
Ich habe keine Ahnung, wie zutreffend dies für Ihre Situation ist, aber Evan Weaver hat einige der gängigen Rails-Suchoptionen (Sphinx, Ferret (ein Port von Lucene für Ruby) und Solr) verglichen und einige Benchmarks ausgeführt. Könnte nützlich sein, denke ich.
Ich habe die Tiefen der Volltextsuche von MySQL nicht untersucht, aber ich weiß, dass sie weder in Bezug auf die Geschwindigkeit noch in Bezug auf die Funktionen mit Sphinx, Lucene oder Solr konkurriert.
quelle
Ich kenne Sphinx nicht, aber was Lucene im Vergleich zu einer Datenbank-Volltextsuche betrifft, denke ich, dass die Leistung von Lucene unübertroffen ist. Sie sollten in der Lage sein, fast jede Suche in weniger als 10 ms durchzuführen, unabhängig davon, wie viele Datensätze Sie durchsuchen müssen, vorausgesetzt, Sie haben Ihren Lucene-Index korrekt eingerichtet.
Hier kommt jedoch die größte Hürde: Ich persönlich denke, dass es nicht einfach ist, Lucene in Ihr Projekt zu integrieren . Sicher, es ist nicht allzu schwierig, es einzurichten, damit Sie eine einfache Suche durchführen können. Wenn Sie jedoch das Beste aus ihm herausholen und eine optimale Leistung erzielen möchten, benötigen Sie auf jeden Fall ein gutes Buch über Lucene.
Was die CPU- und RAM-Anforderungen betrifft, so führt die Suche in Lucene Ihre CPU nicht zu sehr aus, obwohl die Indizierung Ihrer Daten erforderlich ist, obwohl Sie dies nicht zu oft tun (möglicherweise ein- oder zweimal am Tag) eine große Hürde.
Es beantwortet nicht alle Ihre Fragen, aber kurz gesagt, wenn Sie viele Daten suchen müssen und eine hervorragende Leistung wünschen, ist Lucene meiner Meinung nach definitiv 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.
quelle
Ich bin überrascht, dass es keine weiteren Informationen über Solr gibt. Solr ist Sphinx ziemlich ähnlich, verfügt jedoch über erweiterte Funktionen (AFAIK, da ich Sphinx nicht verwendet habe - lesen Sie nur darüber).
Die Antwort unter dem folgenden Link beschreibt einige Dinge über Sphinx, die auch für Solr gelten. Vergleich der Volltextsuchmaschine - Lucene, Sphinx, Postgresql, MySQL?
Solr bietet außerdem die folgenden zusätzlichen Funktionen:
Übrigens gibt es Tonnen mehr Funktionen; Ich habe jedoch nur die Funktionen aufgelistet, die ich tatsächlich in der Produktion verwendet habe. Übrigens unterstützt MySQL sofort # 1, # 3 und # 11 (eingeschränkt) in der obigen Liste. Für die Funktionen, die Sie suchen, wird eine relationale Datenbank sie nicht schneiden. Ich würde diese sofort beseitigen.
Ein weiterer Vorteil ist, dass Solr (eigentlich 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 (dh für die Leistung) verwenden. Werden Sie kreativ damit :)
quelle
Apache Solr
Lassen Sie mich neben der Beantwortung der Fragen von OP einige Einblicke in Apache Solr geben, von der einfachen Einführung bis zur detaillierten Installation und Implementierung .
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 mit Webanwendungen mit hohem Datenverkehr ( ich habe irgendwo gelesen, dass es dafür nicht geeignet ist, aber ich unterstütze diese Aussage ). Es nutzt den RAM, nicht die CPU.
Der Boost hilft Ihnen dabei, Ihre Ergebnisse ganz oben zu platzieren. Sprich : Sie versuchen , einen Namen zu suchen john in den Feldern Vorname und Nachname , und Sie wollen Relevanz der geben Vorname Feld, dann müssen Sie steigern die oben Vorname Feld wie gezeigt.
Wie Sie sehen können, wird das Feld für den Vornamen mit einer Punktzahl von 2 erhöht .
Mehr zu SolrRelevancy
Die Geschwindigkeit ist unglaublich hoch und keine Kompromisse. Der Grund, warum ich nach Solr gezogen bin .
In Bezug auf die Indizierungsgeschwindigkeit kann Solr auch JOINS aus Ihren Datenbanktabellen verarbeiten. Ein höherer und komplexer JOIN wirkt sich auf die Indizierungsgeschwindigkeit aus. Eine enorme RAM- Konfiguration kann diese Situation jedoch problemlos bewältigen.
Je höher der RAM, desto schneller ist die Indizierungsgeschwindigkeit von Solr.
Ich habe nie versucht, Solr und Django zu integrieren , aber Sie können dies mit Haystack erreichen . Ich habe einen interessanten Artikel darüber gefunden und hier ist der Github dafür.
Solr züchtet auf RAM. Wenn der RAM also hoch ist, müssen Sie sich keine Sorgen um Solr machen .
Solrs RAM-Auslastung steigt bei vollständiger Indizierung. Wenn Sie über einige Milliarden Datensätze verfügen, können Sie Delta-Importe intelligent einsetzen, um diese Situation zu bewältigen. Wie bereits erläutert, ist Solr nur eine Echtzeitlösung .
Solr ist hoch skalierbar. Schauen Sie sich SolrCloud an . Einige Hauptmerkmale davon.
Für das obige Szenario können Sie die SpellCheckComponent verwenden , die mit Solr gepackt ist . Es gibt viele andere Funktionen, die SnowballPorterFilterFactory hilft Datensätze abzurufen sagen , wenn Sie eingegeben haben , Bücher statt Buch , werden Sie mit den Ergebnissen im Zusammenhang präsentiert Buch .
Diese Antwort konzentriert sich weitgehend auf Apache Solr & MySQL . Django ist außer Reichweite.
Angenommen, Sie befinden sich in einer LINUX-Umgebung, können Sie mit diesem Artikel fortfahren. (meins war eine Ubuntu 14.04 Version)
Loslegen
Laden Sie Apache Solr von hier . Das wäre Version 4.8.1 . Sie könnten neue Versionen herunterladen, ich fand diesen Stall.
Extrahieren Sie das Archiv nach dem Herunterladen in einen Ordner Ihrer Wahl. Sag ..
Downloads
oder was auch immer .. Also wird es so aussehenDownloads/solr-4.8.1/
Auf Ihre Aufforderung hin. Navigieren Sie in das Verzeichnis
shankar@shankar-lenovo: cd Downloads/solr-4.8.1
Also jetzt bist du hier ..
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1$
Starten Sie den Jetty Application Server
Jetty ist im Beispielordner des
solr-4.8.1
Verzeichnisses verfügbar. Navigieren Sie also darin und starten Sie den Jetty Application Server.shankar@shankar-lenovo:~/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.
Um zu überprüfen, ob Apache Solr erfolgreich ausgeführt wird, besuchen Sie diese URL im Browser. http: // localhost: 8983 / solr
Jetty auf einem benutzerdefinierten Port ausführen
Es wird standardmäßig auf dem Port 8983 ausgeführt. Sie können den Port entweder hier oder direkt in der
jetty.xml
Datei ändern .java -Djetty.port=9091 -jar start.jar
Laden Sie den JConnector herunter
Diese JAR - Datei dient als Brücke zwischen MySQL und JDBC, Laden Sie die Platform Independent Version hier
Extrahieren
mysql-connector-java-5.1.31-bin.jar
Sie nach dem Herunterladen den Ordner, kopieren Sie den Ordner und fügen Sie ihn in das lib- Verzeichnis ein.shankar@shankar-lenovo:~/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 nach Tabellen und Daten suchen. Dafür werden wir MySQL verwenden, um eine Tabelle zu erstellen und einige zufällige Namen zu pushen , und dann könnten wir Solr verwenden , um eine Verbindung zu MySQL herzustellen und diese Tabelle und ihre Einträge zu indizieren.
1.Tabellenstruktur
2. Füllen Sie die obige Tabelle aus
In den Kern eindringen und die lib-Direktiven hinzufügen
1.Navigieren zu
2. Ändern der Datei solrconfig.xml
Fügen Sie diese beiden Anweisungen zu dieser Datei hinzu.
Fügen Sie nun den DIH (Data Import Handler) hinzu.
3.Erstellen Sie die Datei db-data-config.xml
Wenn die Datei vorhanden ist, ignorieren Sie sie und fügen Sie diese Zeilen zu dieser Datei hinzu. Wie Sie in der ersten Zeile sehen können, müssen Sie die Anmeldeinformationen Ihrer MySQL- Datenbank angeben . Der Datenbankname, der Benutzername und das Passwort.
4. Ändern Sie die Datei schema.xml
Fügen Sie dies wie gezeigt zu Ihrer schema.xml hinzu .
Indizierung
Hier ist das eigentliche Geschäft. Sie müssen die Indizierung von Daten von MySQL nach Solr durchführen, um Solr-Abfragen verwenden zu können.
Schritt 1: Gehen Sie zum Solr Admin Panel
Klicken Sie in Ihrem Browser auf die URL http: // localhost: 8983 / solr . Der Bildschirm öffnet sich so.
Gehen , wie die Markierung zeigt an , zu Protokollierung inorder zu überprüfen , ob eine der oben genannten Konfiguration zu Fehlern geführt hat.
Schritt 2: Überprüfen Sie Ihre Protokolle
Ok, jetzt bist du hier. Wie du kannst, gibt es viele gelbe Meldungen (WARNHINWEISE). Stellen Sie sicher, dass keine rot markierten Fehlermeldungen vorliegen. Zuvor hatten wir in unserer Konfiguration eine Auswahlabfrage in unserer Datei db-data-config.xml hinzugefügt . Wenn bei dieser Abfrage Fehler aufgetreten wären, wäre diese hier angezeigt worden.
Gut, keine Fehler. Wir sind gut zu gehen. Wählen Sie wie abgebildet Sammlung1 aus der Liste aus und wählen Sie Datenimport
Schritt 3: DIH (Data Import Handler)
Mit dem DIH stellen Sie von Solr über die Konfigurationsdatei db-data-config.xml über die Solr- Schnittstelle eine Verbindung zu MySQL her und rufen die 10 Datensätze aus der Datenbank ab, die auf Solr indiziert wird .
Um dies zu tun, wählen Sie Voll Import , und überprüfen Sie die Optionen reinigen und Commit . Klicken Sie nun wie gezeigt auf Ausführen .
Alternativ können Sie auch direkt verwenden Voll Import Abfrage wie folgt zu ..
Nachdem Sie auf Ausführen geklickt haben , beginnt Solr mit der Indizierung der Datensätze. Wenn Fehler aufgetreten sind , wird angezeigt , dass die Indizierung fehlgeschlagen ist, und Sie müssen zum Abschnitt Protokollierung zurückkehren, um festzustellen , was schief gelaufen ist.
Angenommen, bei dieser Konfiguration liegen keine Fehler vor, und wenn die Indizierung erfolgreich abgeschlossen wurde, erhalten Sie diese Benachrichtigung.
Schritt 4: Ausführen von Solr-Abfragen
Anscheinend ist alles gut gelaufen. Jetzt können Sie Solr Queries verwenden, um die indizierten Daten abzufragen. Klicken Sie links auf die Abfrage und dann unten auf die Schaltfläche Ausführen .
Sie sehen die indizierten Datensätze wie gezeigt.
Die entsprechende Solr- Abfrage zum Auflisten aller Datensätze lautet
Nun, es gibt alle 10 indizierten Datensätze. Angenommen, wir benötigen nur Namen, die mit Ja beginnen . In diesem Fall müssen Sie den Spaltennamen als Ziel festlegen
solr_name
. Daher lautet Ihre Abfrage wie folgt.So schreiben Sie Solr- Abfragen. Um mehr darüber zu lesen, lesen Sie diesen schönen Artikel .
quelle
Ich beschäftige mich gerade mit der PostgreSQL-Volltextsuche und sie verfügt über die richtigen Funktionen einer modernen Suchmaschine, einen wirklich guten erweiterten Charakter und mehrsprachige Unterstützung sowie eine schöne enge Integration mit Textfeldern in der Datenbank.
Aber es gibt keine benutzerfreundlichen Suchoperatoren wie + oder AND (verwendet & |!) Und ich bin nicht begeistert davon, wie es auf ihrer Dokumentationsseite funktioniert. Während die Ergebnisausschnitte fettgedruckt sind, ist der Standardalgorithmus, für den Übereinstimmungsbegriffe nicht geeignet sind. 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, bei der nicht einmal Wörter mit drei oder weniger Buchstaben indiziert werden. Dies ist die Standardeinstellung für die MediaWiki-Suche, und ich denke wirklich, dass sie 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 durchzuführen, die fast alle zufriedenstellt.
für SHAILI - SOLR enthält die Lucene-Suchcodebibliothek und verfügt über die Komponenten, um eine nette eigenständige Suchmaschine zu sein.
quelle
Tsearch
. Tsearch unterstützt jedoch keine Phrasensuche. Es ist immer noch auf ihrer TODO-Liste sai.msu.su/~megera/wiki/FTS_Todo .Nur meine zwei Cent für diese sehr alte Frage. Ich kann ElasticSearch nur empfehlen .
Die Vorteile gegenüber anderen FTS-Motoren (Volltextsuche) sind:
Wir verwenden diese Suchmaschine in unserem Projekt und sind sehr zufrieden damit.
quelle
SearchTools-Avi sagte: "MySQL-Textsuche, bei der nicht einmal Wörter mit drei oder weniger Buchstaben indiziert werden."
Zu Ihrer Information: Die minimale Wortlänge von MySQL-Volltext ist seit mindestens MySQL 5.0 einstellbar . Google 'MySQL Volltext min Länge' für einfache Anweisungen.
Das heißt, MySQL-Volltext hat Einschränkungen: Zum einen wird die Aktualisierung langsam, sobald Sie eine Million Datensätze oder so erreichen, ...
quelle
Ich würde mnoGoSearch zur Liste hinzufügen . Extrem leistungsfähige und flexible Lösung, die als Google funktioniert: Der Indexer ruft Daten von mehreren Websites ab. Sie können grundlegende Kriterien verwenden oder Ihre eigenen Hooks erfinden, um maximale Suchqualität zu erzielen. Es könnte auch die Daten direkt aus der Datenbank abrufen.
Die Lösung ist heute nicht so bekannt, erfüllt aber die maximalen Anforderungen. Sie können es kompilieren und installieren oder auf einem eigenständigen Server oder sogar auf Ihrem Hauptserver. Es benötigt nicht so viele Ressourcen wie Solr, da es in C geschrieben ist und auch auf kleinen Servern perfekt läuft.
Am Anfang müssen Sie es selbst kompilieren, daher sind einige Kenntnisse erforderlich. Ich habe ein kleines Skript für Debian erstellt, das helfen könnte. Anpassungen sind willkommen.
Da Sie das Django-Framework verwenden, können Sie einen PHP-Client in der Mitte verwenden oder eine Lösung in Python finden. Ich habe einige Artikel gesehen .
Und natürlich ist mnoGoSearch Open Source, GNU GPL.
quelle