Ich habe also eine Java-Anwendung, die auf einem Websphere-Server ausgeführt wird. Der Server verfügt über eine Oracle-Datenbank mit Boxen. Jede Kiste enthält eine Liste mit Dingen. Jedes Ding hat eine Hauptbeschreibung (als Text von Menschen eingegeben) und eine Liste von Label/Wert-Paaren (zB Farbe:schwarz, Menge:3 usw.), die das Ding beschreiben.
Ich möchte einem Benutzer erlauben, diese Datenbank zu durchsuchen, also benötige ich eine Bibliothek, um die Datenbank zu durchsuchen und die Ergebnisse zu ordnen. Dem Benutzer wird gestattet, die gleiche Art von Informationen wie oben beschrieben einzugeben. Ich möchte in der Lage sein, die Felder aufzulisten, die der Benutzereingabe am ehesten entsprechen.
Ich habe mir einige Suchbibliotheken wie Lucene und Xapian angesehen, bin mir aber nicht sicher, was die genauen Fähigkeiten der verschiedenen Bibliotheken angeht. Ich würde gerne die Vor- und Nachteile sehen und ein wenig darüber, wie sie funktionieren, also habe ich begonnen, etwas zu recherchieren.
Aber vorher würde ich gerne Ihre Vorschläge für dieses spezielle Projekt hören.
Sie können auch ElasticSearch ausprobieren .
ElasticSearch ist ein Suchserver auf Lucene . Es bietet eine Json-API zum Durchführen der Suchabfragen und ist wirklich praktisch, wenn es um die Skalierbarkeit geht .
Um eine bestehende Datenbank zu indizieren, sollten Sie deren Inhalt kontinuierlich abfragen.
Hier ist ein Tutorial dafür.
Auf der anderen Seite sollten Sie mit Lucene vertraut sein, um über die Grundlagen hinauszugehen (z. B. benutzerdefinierte Analysatoren, Tokenizer usw.), diese Dinge sind für eine effektive Suche erforderlich.
Last but not least bietet ElasticSearch UND eine Java-API , die ein Wrapper der Json-API ist. Bisher habe ich nur mit Json gearbeitet, aber ich habe einige Nachforschungen darüber angestellt und es ist wirklich einfach zu verwenden, wenn Sie bereits eine Java-Anwendung haben.
Open Source (Apache 2-Lizenz)
Solr könnte gut zu Ihrer Wahl passen.
Als ElasticSearch basiert Solr auf Lucene und bietet unter anderem die gleichen Funktionalitäten wie full-text search
, hit highlighting
und .easy-scalability
Im Allgemeinen finden Sie bei der Suche nach diesen beiden Lösungen viele Ressourcen. Ich überlasse es Ihnen, zu entscheiden, welches Sie verwenden ;) Solr hat definitiv die Nase vorn, wenn es um Reife und Anzahl der Benutzer geht.
Um Ihre vorhandene Datenbank zu indizieren, können Sie einen DataImportRequestHandler verwenden , der verwendet wird JdbcDataSources
, um eine Verbindung zu einer oder mehreren Datenbanken herzustellen und deren Inhalt zu importieren.
Open Source (Apache 2-Lizenz)
Nun, Sie haben die 3 Zauberwörter gesagt: database
, text-search
und Java
.
Ich würde dringend empfehlen, Hibernate-Search zu verwenden , da es für diesen Zweck entwickelt wurde.
Genauer gesagt hat Hibernate-Search folgende Möglichkeiten:
Lucene
im Grunde aber sehr einfach in einer Datenbank zu verwenden, besonders wenn Sie bereits Hibernate verwenden . Sie könnten Lucene ausprobieren , aber der Aufwand, den Index zu speichern, ihn manuell zu aktualisieren und gleichzeitig Änderungen in der Gewichtung von Feldern oder der Struktur Ihrer Datenbank zu berücksichtigen, ja, ist die Mühe nicht wirklich wert ...PS
Ich benutze Lucene seit über einem Jahr beruflich und hatte in der Vergangenheit mit und in Hibernate-Search gearbeitet.
Open-Source (LGPL v2.1)
unoder
Frank Dernoncourt