반응형



elasticsearch

 

 

엘라스틱서치를 Python으로 연동하면서 사용하고 있는데 갑자기 아래와 같은 에러가 발생하였다.

에러 메시지 화면

 

에러 메시지 내용

elasticsearch.BadRequestError: BadRequestError(400, 'search_phase_execution_exception', 'Result window is too large, from + size must be less than or equal to: [10000] but was [10005].

 

에러 원인

에러의 원인은 요청한 Index에 결과가 1만건 이상이기 때문에 발생한 것으로써 index.max_result_window 임계치를 넘어갔기 때문에 발생한 것이다. max_result_window의 기본 설정은 1만건이다.

 

 

  임시 해결 조치 방법

시간이 없을 때 일단 빠르게 해결 할 수 있는 방법은 문제가 발생한 Index에 대해 windows size를 늘리는 것이다.

기본 설정 값인 10000건에서 그 이상으로 늘리면 된다. 참고로 아래는 5만건으로 늘려 주었다

아래 코드는 Kibana > Dev Tools에서 실행 가능한 코드

PUT /<your index name>/_settings
{
  "max_result_window" : 50000
}

 

 

  영구 해결 방법

영구 해결 방법으로 가장 좋은 방법은 Scroll API를 사용하는 것 입니다.

Scroll API는 대량의 데이터를 효율적으로 검색할 때 사용하면 좋습니다.

# 검색할 인덱스와 쿼리 정의
index_name = "your_index_name"
query = {
    "query": {
        "match_all": {}  # 모든 문서를 검색하는 쿼리
    }
}

# Scroll 초기화
scroll_timeout = "2m"  # Scroll 세션 유지 시간
batch_size = 1000      # 한 번에 가져올 문서 수

# 첫 번째 Scroll 요청
response = es.search(index=index_name, body=query, scroll=scroll_timeout, size=batch_size)

 

 

이 글을 통해 문제가 해결 되셨기를 바랍니다^^

 

caul334@gmail.com

내용이 유용하셨다면 좋아요&댓글 부탁드립니다.
이 블로그를 이끌어갈 수 있는 강력한 힘입니다!

 

반응형

+ Recent posts