Estoy tratando de encontrar una manera de mantener mi db mysql y elasticsearch db en sincronía. Configuré un río jdbc con el complemento jprante/elasticsearch-river-jdbc para elasticsearch. Cuando yo haga la solicitud a continuación:Mantener elasticsearch y la base de datos en sincronía
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"
}
}'
el río comienza indexación de datos, pero para algunos registros consigo org.elasticsearch.index.mapper.MapperParsingException
. Bueno, hay una discusión relacionada con este tema here, pero quiero saber una forma de evitar este problema.
¿Es posible corregir esto permanentemente creando un explicit mapping para todos los 'campos' del 'tipo' que estoy tratando de indexar o hay una mejor manera de resolver este problema?
Otra pregunta que tengo es, cuando el jdbc-river sondea nuevamente la base de datos, parece volver a indexar todo el conjunto de datos (dado en la consulta sql) nuevamente en ES. No estoy seguro, pero ¿se hace esto porque elasticsearch quiere agregar datos nuevos y actualizar los cambios en los datos existentes? ¿Es posible indexar solo los datos nuevos, si los datos de la tabla son estáticos?
posible duplicado de [Asegurando que ElasticSearch está en sincronización con la base de datos] (http://stackoverflow.com/questions/11952558/ensuring-elasticsearch-is-in-sync-with-database) – mahemoff