MySQL 데이터베이스를 업데이트하기 위해 ElasticSearch 용 JDBC 플러그인을 사용하고 있습니다. 새 레코드와 변경된 레코드를 선택하지만 MySQL에서 제거 된 레코드는 삭제하지 않습니다. 그들은 색인에 남아 있습니다. OSX 마운틴 라이온, 오류나 문제에 사제를 통해 ElasticSearch 설치ElasticSearch river JDBC MySQL이 레코드를 삭제하지 않습니다.
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",
"poll" : "5s",
"versioning" : true,
"digesting" : false,
"autocommit" : true,
"index" : "headphones",
"type" : "Account"
}
}'
예상대로 모든 응답 :
이
내가 강을 만드는 데 사용하는 코드입니다. 권한 OK, 로그에 오류가 없습니다.제가 생각할 수있는 autocommit
, versioning
및 digesting
의 모든 조합을 제거하고 포함 (true 및 false로 설정)했습니다. 그것은 dev 데이터베이스이므로 레코드가 완전히 삭제되고 캐시되지 않고 소프트 삭제되지 않았 음을 확신합니다. 모든 레코드를 삭제하면 (즉, 강을 그대로두고 ES에서 색인 된 내용을 삭제하면) 강을 다음에 업데이트하면 레코드가 다시 추가되지 않으므로 버전 관리 및 삭제와 관련하여 무언가를 놓쳤다는 것을 알게됩니다 .
참고 _id
열을 지정하는 데 여러 가지 방법을 시도했으며 호출시 JSON을 통해 값이 있는지 확인했습니다.
건배.
업데이트가 우리에게 결코 만족스럽지 못하고 다른 접근 방식을 취할 수있었습니다. 우리 시스템은 이벤트를 사용하여 개별 레코드의 변경 사항을 파악하고 ElasticSearch를 직접 업데이트합니다. 이를 통해 우리는 무엇이 진행될 것인지를 대단히 세밀하게 제어 할 수 있으며 시스템에서 다시 색인을 다시 시작할 수 있습니다. 아무도 대답을 찾지 못해서 미안해. –