카테고리 없음

reindex 왜자꾸 문서의 갯수가 다르게 복제될까?

인계동ADHD환자 2022. 10. 6. 18:41
728x90

 

그리고 우선 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