Halten elasticsearch und die Datenbank synchronisiert
Ich versuche, herauszufinden, einen Weg, um meine mysql-db und elasticsearch-db synchronisiert. Ich habe setup eine jdbc-Fluss über die jprante /elasticsearch-river-jdbc plugin für elasticsearch. Wenn ich führen Sie die nachstehenden Antrag:
curl -XPUT 'localhost:9200/_river/my_jdbc_river/_meta' -d '{
"type" : "jdbc",
"jdbc" : {
"driver" : "com.mysql.jdbc.Driver",
"url" : "jdbc:mysql://localhost:3306/MY-DATABASE",
"user" : "root",
"password" : "password",
"sql" : "select * from users",
"poll" : "1m"
},
"index" : {
"index" : "test_index",
"type" : "user"
}
}'
dem Fluss beginnt die Indizierung der Daten, aber für die paar Schallplatten, die ich bekommen org.elasticsearch.index.mapper.MapperParsingException
. Nun gibt es Diskussionen in Bezug auf dieses Problem hier, aber ich möchte wissen, einen Weg, um dieses Problem.
Ist es möglich, dauerhaft dieses Problem beheben, indem eine explizite Zuordnung für alle 'Felder' des 'Typ', dass ich versuche, index oder gibt es einen besseren Weg, um dieses Problem zu lösen?
Andere Frage, die ich habe, ist, wenn der jdbc-Fluss abfragt, die Datenbank erneut, so scheint es, um re-index die gesamten Daten-set(gegeben in der sql-Abfrage) wieder in ES. Ich bin mir nicht sicher, aber ist dies getan, weil elasticsearch hinzufügen will frische Daten sowie update-alle änderungen in den vorhandenen Daten? Ist es möglich index nur die frischen Daten, wenn die Daten der Tabelle ist statisch?
- mögliche Duplikate von die Gewährleistung ElasticSearch ist in Synchronisation mit der Datenbank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie Blick auf default-mapping?
http://www.elasticsearch.org/guide/reference/mapping/dynamic-mapping.html
Ich denke, es kann Ihnen dabei helfen.
Wenn Sie ein Datum einfügen-Feld in der Datentabelle, können Sie es verwenden, um zu filtern, was Sie zu indizieren.
Sehen https://github.com/jprante/elasticsearch-river-jdbc#time-based-selecting
HTH
David
Elastic Search gesunken, der Fluss sync-Konzept. Es ist nicht eine empfohlene Weg, denn in der Regel ist es nicht sinnvoll zu halten normalisierte SQL-Tabellenstruktur im Dokument speichern wie Elastic Search.
Sagen, Sie haben Produkt wie ein Unternehmen mit einigen Parametern und Reviews auf Produkt-Entität als Eltern-Kind-Tabelle, wie Bewertungen könnten mehrere auf dieselbe Tabelle.
Im Dokument zu speichern, dann erstellen Sie einen Index mit dem Namen sagen Produkt enthält
Product{attribute1, attribute1,... Product reviews[review1, review2,...]}
Hier ist der Ansatz der Synchronisierung in einem solchen setup.
Annahme:
Lösung: