2016-04-20 2 views
0

Ich habe viele MySQL-Tabellen, um verschiedene Arten von Daten wie Waren, Kategorien, Marken, Lieferanten usw. zu speichern. Jede von ihnen muss Volltextsuche über Lucene implementieren.Sollte ich mehrere Lucene-Verzeichnisse/Indizes verwenden, um verschiedene Datentypen zu durchsuchen?

Also plane ich ein Lucene-Verzeichnis (und ein IndexWriter + ein IndexReader entsprechend diesem Verzeichnis) für jede Tabelle, z.

HashMap<String, Directory> = ...; 
put("goods", FSDirectory.open(luceneDirRoot + "/goods")); 
put("catagories", FSDirectory.open(luceneDirRoot + "/catagories")); 
... 

Ist dies eine gute Praxis, Lucene zu verwenden?

Furthur mehr, wie kann ich wissen, wie viele Verzeichnisse ich von Lucene, wie MySQL-Befehl "SHOW TABLES" gemacht habe? new File(luceneDirRoot).listFiles() kann eine Wahl sein, aber ich bin nicht sicher, ob es andere Nicht-Lucene-Ordner gibt.

Antwort

1

Ich würde eine Lucene-Index pro MySQL-Tabelle implementieren, vorausgesetzt, Sie müssen nicht über mehrere Tabellen suchen. Eine Alternative wäre, alles in einen Index zu schreiben und einen Tabellennamen in jedes Lucene-Dokument einzufügen, auf diese Weise könnten Sie die Suche auf eine bestimmte Tabelle beschränken.

AFAIK Lucene unterstützt SHOW TABLES nicht auf die gleiche Weise, wie Sie es wünschen, aber Sie können das leicht selbst tun, z. durch Verwenden der Namenskonvention für die Verzeichnisse.

Ich würde empfehlen, auf Hibernate Search zu schauen, dies ist eine gute Übereinstimmung für Ihre Bedürfnisse, es baut ein Indexverzeichnis pro Tabelle und ermöglicht Ihnen die Volltextsuche bei der Behandlung der Low-Level Lucene Probleme für Sie. Sie konfigurieren den Index einfach, indem Sie die JPA-Entitäten, die Ihren Tabellen entsprechen, mit Anmerkungen versehen und die Volltextabfragen implementieren müssen. Dies ist viel einfacher als das Ausführen von nackten Lucene mit Daten von MySQL selbst, Hibernate Search erstellt den Index für Sie und integriert sich gut mit Daten aus relationalen DB wie MySQL.

Verwandte Themen