-
reindex 왜자꾸 문서의 갯수가 다르게 복제될까?카테고리 없음 2022. 10. 6. 18:41728x90
그리고 우선 csv을 es에 넣을때 자동으로 인덱스 생성이 되는 편리한 기능이 있지만
이것도 단점이 있다
자꾸가 8월11일까지만 들어가 있길래 뭔지 확인해봤더니
데이터의 사이즈를 1000개까지만 가져오도록 설정이 되어있기 때문이다

es csv파일 데이터 lines설정 오버라이딩 셋팅을 누르고 사이즈를 직접입력해준다
나는 17000개 정도의 데이터가 있으니 18000개로 했다
그리고 새로운 인덱스와 데이터 파이프라인을 만들어서 17000개의 데이터를 리인덱스 시키려 보니까
자꾸 1000개에서 끊긴다.
이유는 사이즈 때문이다
POST _reindex
{
"source": {
"index": "geo_stomi_csv",
"size": 10000
},
"dest": {
"index": "geo_stomi_new_index",
"pipeline": "stomi_pipeline"
}
}원래 source안에 디폴트로 1000개만 가져온다고 한다(es는 디폴트로 1000이란 숫자를 참 좋아하나보다)
geo_stomi_csv 이인덱스 안에는 문서가 17000개정도가 있는데 자꾸 1000개 정도만 가져와서
뭐일까 봤는데 디폴트 사이즈 때문이라고 한다
그래서 사이즈를 18000으로 늘려줬더니
"error": {
"root_cause": [
{
"type": "illegal_argument_exception",
"reason": "Batch size is too large, size must be less than or equal to: [10000] but was [18000]. Scroll batch sizes cost as much memory as result windows so they are controlled by the [index.max_result_window] index level setting."이와 같은 에러가 뜬다
최대로 맥스를 지정할 수 있는 사이즈 10000개이다ㅣ
7000개는 대체 어떻게 reindex할 수 있을까..에바 참치다..
결론은 csv파일안에서 그냥 10000개 지우고 7000개만 다시 가져왔는데
인덱스안에서 도큐먼트의 순서를 지정해서 가져왔으면 좋겠다
최대 만개까지만 가능하니 만개단위로 쪼개서 가져갈 수 있는 방법을 알아내는게 좋을 것같다
그냥 파이썬으로 하는게 가장 편해보이긴하다
하지만 여기서 또하나의 문제점이 나왔다
만개의 데이터를 geo_stomi_csv라는 인덱스에 넣었고
7000개의 데이터를 geo_remain이라는 인덱스에 넣었다
그리고 reindex를 두번을 해줬더니 마지막에 실행한 리인덱스만 살아남고
앞에 넣었던 만개의 데이터가 없어졌다.
만개의 데이터를 다시 리인덱스 시키면 칠천개의 인덱스가 사라진다...
해결방법은
Setting version_type to external causes Elasticsearch to preserve the version from the source, create any documents that are missing, and update any documents that have an older version in the destination than they do in the source.
es에사 디폴트로 version_type을 internal을 하고있기 때문에
POST _reindex
{
"source": {
"index": "geo_stomi_csv",
"size": 10000
},
"dest": {
"index": "geo_stomi_new_index",
"pipeline": "stomi_pipeline",
"version_type": "external"
}
}
external로 설정해주면 인덱스안에 있는 데이터들은 그대로 냅두고 새로 덮어씌어준다728x90