2008-08-29 11 views
54

Ich möchte Suchfunktionalität für eine Website implementieren (angenommen, es ist ähnlich wie SO). Ich möchte die Google-Suche nach solchen Dingen nicht verwenden.Wie implementiere ich Suchfunktionalität in einer Website?

Meine Frage ist:

Wie kann ich das umsetzen?

Es gibt zwei Methoden, die ich bin mir dessen bewusst:

  1. Suche alle Datenbanken in der Anwendung, wenn der Benutzer seine Abfrage gibt.
  2. Index alle Daten, die ich habe und speichern Sie es woanders und Abfrage von dort (wie was Google tut).

Kann mir jemand sagen, welcher Weg zu gehen? Was sind die Vor- und Nachteile?

Besser, gibt es bessere Möglichkeiten, dies zu tun?

Antwort

33

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

Apache Lucene ist eine leistungsstarke, voll funktionsfähige Textsuchmaschine Bibliothek komplett in Java geschrieben. Es ist 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, was Sie wollten (Indizierung der gesuchten Objekte), Sie müssen den Überblick über einen Lucene-Index behalten, aber es ist viel besser als eine Datenbanksuche in Bezug auf die Leistung. BTW, SO Suche wird von Lucene betrieben. : D

+0

Wenn Sie Lucene betrachten, sollten Sie das Solr-Projekt WIRKLICH anschauen. Betrachten Sie es als Lucene als Service – sclarson

4

Sie möchten vielleicht xapian und das omega Frontend betrachten. Es ist im Wesentlichen ein Toolkit, auf dem Sie Suchfunktionen aufbauen können.

1

Der beste Weg, dies zu erreichen, hängt davon ab, wie Sie Ihre Seiten erstellen.

Wenn sie häufig aus vielen verschiedenen Datensätzen bestehen (wie ich mir Stapelüberlaufseiten vorstellen), wird der Indexierungsansatz wahrscheinlich bessere Ergebnisse liefern, wenn Sie nicht viel Arbeit in die effektive Rekonstruktion der Seiten in der Datenbank investieren Seite.

Der Nachteil des Indexierungsansatzes ist die Bearbeitungszeit. Es gibt Workarounds (wie die Sitemap-Sachen von Google), aber sie sind auch komplex, um richtig zu funktionieren.

Wenn Sie mit Datenbank-Pfad gehen, auch bewusst sein, dass moderne Suchmaschinen-Systeme viel besser funktionieren, wenn sie Link-Daten zu verarbeiten haben, so ein System zu finden, die Links zwischen "Seiten" in der Datenbank verstehen wird einen positiven Effekt haben .

0

Dies ist etwas orthogonal zu Ihrer Frage, aber ich empfehle die Idee einer RESTful Suche. Das heißt, um eine Suche durchzuführen, die noch nie durchgeführt wurde, sendet die Website eine Abfrage an/search /. Um eine Suche erneut auszuführen, muss die Website GETs/search/{einige ID}

Es gibt einige gute Dokumente in diesem Zusammenhang zu finden, zum Beispiel here.

(Das heißt, ich mag die Indizierung, wo möglich, obwohl es sich um eine Optimierung ist, und kann somit verfrüht.)

-1

Wenn Sie Anwendung verwendet die Java EE-Stack und Sie verwenden Hibernate Sie die Compass Framework verwenden pflegen ein durchsuchbarer Index Ihrer Datenbank. Das Compass Framework verwendet Lucene unter der Haube.

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

1

Wenn Sie auf Microsoft-Plattform sind, können Sie den Indexdienst verwenden. Dies integriert sich sehr einfach in IIS-Websites.

Es hat alle grundlegenden Funktionen wie Volltextsuche, Ranking, Exlcude und enthalten bestimmte Dateitypen und Sie können Ihre eigenen Meta-Informationen sowie über Meta-Tags in den HTML-Seiten hinzufügen.

Machen Sie eine Google und Sie werden Tonnen finden!

30

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

Wenn Sie eine kleine Website ohne weitere Möglichkeiten führen eine benutzerdefinierte Suche hinzufügen möchten, lassen Sie Google die Arbeit machen (vielleicht ein sitemap hinzufügen) und die google custom search verwenden.

Wenn Sie eine mittlere Website mit einer SQL-Engine ausführen, verwenden Sie die Suchfunktionen Ihrer SQL-Engine.

Wenn Sie laufen einige schwerer Software-Stack wie J2EE oder .NET verwenden Lucene, eine große, leistungsfähige Suchmaschine oder seine .Net-Klon lucene.Net

Wenn Sie abstrakt Ihre Suche aus Ihrer Anwendung wünschen und in der Lage sein, es mit XML/HTTP- und JSON-APIs auf sprachneutrale Weise abzufragen, werfen Sie einen Blick auf solr. Solr betreibt Lucene im Hintergrund, fügt aber ein nettes Webinterface hinzu.

+3

Ich habe eine Frage dazu. Kann ich eine benutzerdefinierte Google-Suche für eine Intranetsite implementieren? Wenn ich dies tue, stelle ich mein Unternehmen in Gefahr? Ich möchte lieber nicht meine eigene Logik schreiben. – Richie

+0

Google benutzerdefinierte Suche wurde BTW getötet. Microsoft hat eine Alternative zu Bing, denke ich. – demaniak

Verwandte Themen