update_by_query version conflict in elasticsearch

개발새발·2023년 1월 1일
0

elasticsearch

목록 보기
36/54

새로운 기능에 대한 테스트를 진행하는 와중 _update_by_query 라는 API를 사용하는데, VersionConflictEngineException 어쩌구 에러를 발견하게 됐다. 이건 또 뭔데… ㅠㅠ

원인

인덱스에 document 에는 각자 관리하는 version이 존재하는데, 이 version은 document가 수정될때마다 하나씩 올라간다. 즉, 쿼리별 업데이트를 할때 일종의 데이터 스냅샷을 만들어 일치하는 각 document를 업데이트하게 되고, 업데이트가 실행이 시작된 후 document가 다른 프로세스에 의해 업데이트되었음을 의미한다.

해결방법

다른 곳들에서는 retry_on_conflict 라는 애를 수정해주면 된다고 하는데, 이 방법은 단일문서를 업데이트하는데에만 사용하는 것 같았다. 내 경우 여러문서를 한꺼번에 업데이트해줘야해서 찾아보니, POST index/_update_by_query?conflicts=proceed이런 게 있었다. 충돌이 있으면 그 문서에 대해서는 스킵하는 방법이였는데, 괜찮은 방법인지는 아직 확신이 없다. 일단 내 생각은 충돌했다 = 이미 변경된 문서다 라는 의미 같아서 굳이 충돌된 것을 다시한번 업데이트해줄 필요가 없다고 생각해서 이 방법으로 사용하는 게 좋은 방법인 것 같다라는 생각이 들었다.

참고 : https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html, https://wedul.site/620, https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html

profile
발새발개

0개의 댓글