Was ist eine gute Open Source Information Retrieval Library (Suchmaschine)?

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.

Ich habe die Tags search-engine und library hinzugefügt . -- Nicht sicher, ob nlp (@FranckDernoncourt) und Datenanalyse hier wirklich zutreffen?
@unor Information Retrieval wird oft in NLP-Kursen gelehrt, z. B. coursera.org/course/nlp ; aber es macht mir nichts aus, wenn Sie das nlp-Tag entfernen möchten.

Antworten (3)

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 highlightingund .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-searchund 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:

  • Fügen Sie Textsuche in Ihrer bestehenden Datenbank durch Anmerkungen in Ihren bestehenden Entitäten hinzu.
  • Annäherungsweise finden (Fuzzy-Suche) und Ergebnisse einordnen.
  • Es ist Luceneim 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 ...
  • Extrem einfach anzufangen: Bücher, exzellente Dokumentation, viele Beispiele online und eine Schnellstartanleitung, die ich erstellt habe, wenn Sie überprüfen möchten, wie es funktioniert.
  • Das Motto von Hibernate-Search lautet: „Google your database“

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)