Próbuję znaleźć sposób, aby zachować synchronizację moich danych mysql db i elasticsearch db. Skonfigurowałem rzekę jdbc za pomocą wtyczki jprante/elasticsearch-river-jdbc dla elastycznego wyszukiwania. Kiedy wykonać poniższe zapytanie:Utrzymywanie elastycznego przeszukiwania i bazy danych w synchronizacji
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"
}
}'
rzeka zaczyna indeksowania danych, ale dla niektórych zapisów uzyskać org.elasticsearch.index.mapper.MapperParsingException
. No i jest dyskusja związana z tym problemem here, ale chcę wiedzieć, jak obejść ten problem.
Czy można to naprawić na stałe, tworząc explicit mapping dla wszystkich "pól" typu "próbuję" indeksować lub czy istnieje lepszy sposób rozwiązania tego problemu?
Mam jeszcze jedno pytanie, kiedy jdbc-river odpytuje bazę danych ponownie, wydaje się ponownie indeksować cały zestaw danych (podany w zapytaniu sql) ponownie do ES. Nie jestem pewien, ale czy to się robi, ponieważ elasticsearch chce dodawać nowe dane, a także aktualizować wszelkie zmiany w istniejących danych? Czy możliwe jest indeksowanie tylko świeżych danych, jeśli dane tabeli są statyczne?
możliwy duplikat [Zapewnienie ElasticSearch jest zsynchronizowany z bazą danych] (http://stackoverflow.com/questions/11952558/ensuring-elasticsearch-is-in-sync-with-database) – mahemoff