Seit diese Frage gestellt wurde, haben sich die Parameter stark geändert, Versionierung und Digest wurden verworfen und die Abfrage wurde durch einen Zeitplan ersetzt, der einen Cron-Ausdruck dafür verwendet, wie oft der Fluss erneut ausgeführt werden soll (unten ist geplant, dass er alle 5 Minuten ausgeführt wird )
curl -XPUT 'localhost:9200/_river/account_river/_meta' -d '{
"type" : "jdbc",
"jdbc" : {
"driver" : "com.mysql.jdbc.Driver",
"url" : "jdbc:mysql://localhost:3306/test",
"user" : "test_user",
"password" : "test_pass",
"sql" : "SELECT `account`.`id` as `_id`, `account`.`id`, `account`.`reference`, `account`.`company_name`, `account`.`also_known_as` from `account` WHERE NOT `account`.`deleted`",
"strategy" : "simple",
"schedule": "0 0/5 * * * ?" ,
"autocommit" : true,
"index" : "headphones",
"type" : "Account"
}
}'
Aber für die Hauptfrage, die Antwort, die ich vom Entwickler bekommen habe, lautet://github.com/jprante/elasticsearch-river-jdbc/issues/213
Ich habe das Housekeeping mit Versionierung versucht, aber das funktionierte nicht gut zusammen mit inkrementellen Updates und dem Hinzufügen von Zeilen.
Eine gute Methode wäre die Fensterindizierung. In jedem Zeitrahmen (vielleicht einmal pro Tag oder pro Woche) wird ein neuer Index für den Fluss erstellt und einem Alias hinzugefügt. Alte Indizes sollen nach einiger Zeit gelöscht werden. Diese Wartung ähnelt der Logstash-Indizierung, liegt jedoch außerhalb des Geltungsbereichs eines Flusses.
Die Methode, die ich derzeit verwende, um Aliasing zu erforschen, besteht darin, den Index und den Fluss jede Nacht neu zu erstellen und den Fluss so zu planen, dass er alle paar Stunden ausgeführt wird. Es stellt sicher, dass neue Daten, die eingegeben werden, an diesem Tag indexiert werden und Löschungen alle 24 Stunden widergespiegelt werden