Sto cercando di capire come mantenere il mio mysql db ed elasticsearch db sincronizzati. Ho configurato un fiume jdbc usando il plugin jprante/elasticsearch-river-jdbc per elasticsearch. Quando ho esecuzione alla richiesta di seguito:Mantenere elasticsearch e database sincronizzati
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"
}
}'
il fiume inizia l'indicizzazione dei dati, ma per alcuni record ottengo org.elasticsearch.index.mapper.MapperParsingException
. Beh, c'è una discussione relativa a questo numero here, ma voglio sapere come aggirare questo problema.
È possibile risolvere in modo permanente questo creando un explicit mapping per tutti i "campi" del "tipo" che sto cercando di indicizzare o esiste un modo migliore per risolvere questo problema?
Un'altra domanda che ho è, quando jdbc-river esegue nuovamente il polling del database, sembra reindicizzare nuovamente l'intero set di dati (fornito in sql query) in ES. Non sono sicuro, ma lo fa perché elasticsearch vuole aggiungere nuovi dati e aggiornare eventuali modifiche ai dati esistenti? È possibile indicizzare solo i nuovi dati, se i dati della tabella sono statici?
possibile duplicato di [Garantire ElasticSearch è sincronizzato con Database] (http://stackoverflow.com/questions/11952558/ensuring-elasticsearch-is-in-sync-with-database) – mahemoff