Wir haben eine große Anzahl von Textdateien, die wir für die Freitext- / Volltextsuche verwenden möchten, kombiniert mit relational strukturierten Metadaten über die Textdatei. Eine Suche könnte also lauten: "Geben Sie mir alle Dateien, die zur Gruppe X (oder zu Untergruppen von X) gehören, einen Autor haben (Ari und Bari und Mari), zur Organisation Y gehören und den Text" synthetisch "enthalten. Letzterer Teil Dies ist eine Volltextsuche, und die andere wird bereits als relationale Daten in unserer vorhandenen Datenbank gespeichert.
In unserer Datenbank (die ziemlich komplex ist) gibt es eine Möglichkeit, die Dateien zu identifizieren, und eine Menge verschiedener Metadaten über die Datei, die auf zehn Tabellen verteilt sind, von einfachen 1-1-Beziehungen bis zu 1-viele-Mengen pr Datei und sogar Baum-Struktur-Beziehung (Dinge wie "Diese Datei ist vom Typ X, Typ X ist eine Untergruppe vom Typ Y usw.). Und diese Metadaten können sich im Laufe der Zeit in der gesamten Anwendung ändern (was sehr groß ist).
Als Datenbankadministrator dachte ich nun, dass dies gelöst werden könnte, indem SQL Server verwendet wird, um nach strukturierten Metadaten zu suchen, die sich bereits in der Datenbank befinden, die Suche auf Kandidatendateien beschränkt und dann die IDs der Kandidatendatei an die elastische Suche nach Volldateien übergeben werden. Textsuche. (Das erneute Indizieren der Datei auf elastisch, wenn eine Datei hinzugefügt oder festgeschrieben wird, ist in unserem Code trivial.)
Die Elastic-Jungs in unserem Projekt hatten natürlich eine andere Idee: Alle Metadaten sowie den Volltextinhalt aus den Dateien zu extrahieren, die Elastic-Suche durchzuführen und die Suche ausschließlich in Elastic durchzuführen.
Auf diese Weise können sie problemlos Lucene-Abfragen mit voller Leistung ausführen, und die Datenbank wird entladen, was sehr hilfreich ist. Dies führt jedoch auch für mich zu einem Albtraum, um die strukturierten Metadaten synchron zu halten, und eine blinde Neuindizierung / Synchronisierung aller Elemente ist aufgrund des Datenumfangs nicht möglich.
Ich kann die Vorzüge / Bedenken beider Optionen erkennen. Gibt es eine bewährte Methode für diese Art von Dingen?