Frage

Ich möchte eine Suchfunktion für eine Website implementieren (vorausgesetzt, sie ähnelt SO).Ich möchte die Google-Suche für solche Dinge nicht verwenden.

Meine Frage ist:

Wie setze ich das um?

Mir sind zwei Methoden bekannt:

  1. Durchsuchen Sie alle Datenbanken in der Anwendung, wenn der Benutzer seine Anfrage stellt.
  2. Indizieren Sie alle Daten, die ich habe, speichern Sie sie an einem anderen Ort und fragen Sie von dort aus ab (wie es Google tut).

Kann mir jemand sagen, in welche Richtung ich gehen soll?Was sind die Vor- und Nachteile?

Gibt es bessere Möglichkeiten, dies zu tun?

War es hilfreich?

Lösung

Verwenden Sie Lucene,
http://lucene.apache.org/java/docs/

Apache Lucene ist eine leistungsstarke Textsuchmaschinenbibliothek mit vollem Funktionsumfang, die vollständig in Java geschrieben ist.Es handelt sich um eine Technologie, die für nahezu jede Anwendung geeignet ist, die eine Volltextsuche erfordert, insbesondere plattformübergreifend.

Es ist in Java und .net verfügbar.Es ist auch in PHP in Form eines Zend-Framework-Moduls verfügbar.

Lucene macht das, was Sie wollten (Indizierung der gesuchten Elemente). Sie müssen einen Lucene-Index im Auge behalten, aber es ist hinsichtlich der Leistung viel besser als eine Datenbanksuche.Übrigens wird die SO-Suche von Lucene unterstützt.:D

Andere Tipps

Es hängt davon ab, wie umfassend Ihre Website ist und wie viel Sie selbst tun möchten.

Wenn Sie eine a kleine Website Ohne weitere Möglichkeiten zum Hinzufügen einer benutzerdefinierten Suche überlassen Sie Google die Arbeit (fügen Sie möglicherweise eine hinzu). Seitenverzeichnis) und verwenden Sie die Benutzerdefinierte Google-Suche.

Wenn Sie a ausführen mittlere Seite Verwenden Sie bei einer SQL-Engine die Suchfunktionen Ihrer SQL-Engine.

Wenn Sie einige laufen lassen schwererer Software-Stack wie J2EE oder .Net verwenden Lucene, eine großartige, leistungsstarke Suchmaschine oder ihr .Net-Klon lucene.Net

Wenn Sie wollen Abstrahieren Sie Ihre Suche von Ihrer Bewerbung und es sprachneutral mit XML/HTTP- und JSON-APIs abfragen können, schauen Sie sich an solr.Solr führt Lucene im Hintergrund aus, fügt aber eine schöne Weboberfläche hinzu.

Vielleicht möchten Sie einen Blick darauf werfen xapian und das Omega Frontend.Es handelt sich im Wesentlichen um ein Toolkit, auf dem Sie Suchfunktionen aufbauen können.

Wie Sie dies am besten angehen, hängt davon ab, wie Sie Ihre Seiten aufbauen.

Wenn sie häufig aus vielen verschiedenen Datensätzen bestehen (wie ich mir Stapelüberlaufseiten vorstellen kann), liefert der Indexierungsansatz wahrscheinlich bessere Ergebnisse, es sei denn, Sie investieren viel Arbeit in die effektive Rekonstruktion der Seiten auf der Datenbankseite.

Der Nachteil des Indexierungsansatzes ist die Bearbeitungszeit.Es gibt Problemumgehungen (wie die Sitemap-Funktion von Google), aber es ist auch schwierig, sie richtig umzusetzen.

Wenn Sie sich für den Datenbankpfad entscheiden, sollten Sie sich auch darüber im Klaren sein, dass moderne Suchmaschinensysteme viel besser funktionieren, wenn sie Linkdaten verarbeiten müssen. Daher wird es einen positiven Effekt haben, ein System zu finden, das Links zwischen „Seiten“ in der Datenbank verstehen kann.

Wenn Sie eine Microsoft-Plattform verwenden, können Sie den Indexierungsdienst nutzen.Dies lässt sich sehr einfach in IIS-Websites integrieren.

Es verfügt über alle grundlegenden Funktionen wie Volltextsuche, Ranking, Ausschließen und Einschließen bestimmter Dateitypen und Sie können über Meta-Tags in den HTML-Seiten auch Ihre eigenen Metainformationen hinzufügen.

Googeln Sie und Sie werden jede Menge finden!

Dies steht etwas im Widerspruch zu Ihrer Frage, aber ich empfehle die Idee einer RESTful-Suche wärmstens.Das heißt, um eine Suche durchzuführen, die noch nie durchgeführt wurde, sendet die Website eine Abfrage an /searches/.Um eine Suche erneut auszuführen, ruft die Website /searches/{irgendeine ID} ab.

Hierzu gibt es zum Beispiel einige gute Dokumente Hier.

(Trotzdem bevorzuge ich die Indizierung, wo immer möglich, obwohl es sich um eine Optimierung handelt und daher verfrüht sein kann.)

Wenn Ihre Anwendung den Java EE-Stack verwendet und Sie ihn verwenden Überwintern du kannst den ... benutzen Kompass-Framework Pflegen Sie einen durchsuchbaren Index Ihrer Datenbank.Das Compass Framework verwendet Lucene unter der Haube.

Der einzige Haken ist, dass Sie Ihren Suchindex nicht replizieren können.Sie müssen also eine Clusterdatenbank verwenden, um die Indextabellen zu speichern, oder die neueren gitterbasierten Indexspeichermechanismen verwenden, die dem Compass Framework 2.x hinzugefügt wurden.

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