5

Ich konfiguriere JDBC Fluss für ElasticSearch, aber ich kann keine gute Konfiguration Beispiel finden. Ich habe alle pages auf elasticsearch-river-jdbc GitHub gelesen.Abrufen von Änderungen aus der Tabelle mit ElasticSearch JDBC Fluss

Ich habe eine SQL-Abfrage und ich muss Änderungen aus allen Tabellenspalten alle X Sekunden abrufen. Wie kann ich dem JDBC-Fluss mitteilen, dass eine Zeile geändert wurde und neu indiziert werden sollte?

Daten werden während des ES-Server-Starts abgerufen, Abfragen werden ausgeführt, aber Änderungen werden nicht von DB an ES abgerufen.

Meine Konfiguration:

curl -XPUT 'localhost:9200/_river/itemsi/_meta' -d '{ 
"type" : "jdbc", 
"jdbc" : { 
    "driver" : "com.mysql.jdbc.Driver", 
    "url" : "jdbc:mysql://mydb.com:3306/dbname", 
    "user" : "yyy", 
    "password" : "xxx", 
    "sql" : "SELECT ii.id AS _id, ii.id AS myid, ... FROM ... LEFT JOIN .. ON...", 
    "poll" : "6s", 
    "strategy" : "simple" 
    }, 
"index" : { 
    "index" : "invoiceitems", 
    "bulk_size" : 600, 
    "max_bulk_requests" : 10, 
    "bulk_timeout" : "5s", 
    } 
}' 

Danke.

Antwort

1

"autocommit" hinzufügen: true

in Indexeinstellungen. Dann wird das Problem gelöst

0

Ich kann Ihnen nur meine Meinung dazu geben, da ich gerade eine Lösung entwickle, die einen großen Index einer Informix DB ausführt. Also hier ist meine aktuelle Denkprozess, der nicht getestet oder implementiert wurde -

Was ich vorhabe ist eine One-Shot-Index der Core-Datenbank selbst durchzuführen, von dort Trigger implementieren, um aktualisierte und/oder neue Datensätze zu feuern in eine separate Tabelle. Offensichtlich lösche ich diesen Fluss, sobald ich den ersten Index erstellt habe, damit er den Primärindex nicht erneut ausführt, von hier aus werde ich dann einen Fluss definieren, um die Tabelle abzufragen, die zum Beispiel alle 15 Minuten die aktualisierten und/oder neuen Datensätze enthält und lade das in ES.

Das Bit, das ich noch nicht ganz herausgefunden habe, aktualisiert die Datensätze bereits innerhalb von ES, da mir keine Funktionalität innerhalb des River-Plugins bekannt ist, mit der Sie die ID des Datensatzes vielleicht aus einem ID-Feld setzen können innerhalb des aktuellen DB-Datensatzes, so dass Sie von ES abrufen und aktualisieren können. Vielleicht ein eigenständiges Programm schreiben, das genau das tut, was das River-Plugin tut ?!

Alle Gedanken und Spekulationen im Moment, aber wie gesagt ich arbeite gerade daran. Wenn ich mich erinnere, werde ich vielleicht hierher zurückkehren und meine endgültige Implementierung veröffentlichen, wenn es jemals erlaubt ist, so weit zu kommen.

+0

Vielen Dank! Wegen der fehlenden Dokumentation für ElasticSearch denke ich über Sphinx nach. Aber ich würde mich freuen, wenn du später nach deiner Recherche da schreibst. – Xdg

2

Sie können Zeitplan-Parameter verwenden, die Wiederholungsläufe von JDBC River-Plugin ermöglicht.

Beispiel für einen Zeitplan Parameter:

"schedule" : "0 0-59 0-23 ? * *" 

Dies führt JDBC Fluss jede Minute, jede Stunde, alle Tage in der Woche/Monat/Jahr.

Weitere Informationen zu Zeitplan Parameter lesen Dokumentation, https://github.com/jprante/elasticsearch-river-jdbc

Verwandte Themen