Elasticsearch 검색 프로세스 상세 정보

앞말


설명: 이 문서의 ES 버전은 다음과 같습니다6.7.0
이전 글의 Elasticsearch에서 색인을 어떻게 만듭니까?에서는 ES 문서 작성 프로세스에 대해 설명합니다.
다음은 ES에서 검색 과정이 어떻게 되는지 구체적으로 살펴보겠습니다.

ES에서 검색


앞의 몇 편의 문장 절차에 따라 우리는 직접 debug 검색 과정을 시작한다.지난 문장에서 우리는 아래의 데이터를 썼다
{
    "id":6,
    "title": " , 66",
    "text":  " ,ES 66",
    "date":  "2014/01/06"
}'

다음 요청을 수행하여 ES 서버에 대한 검색 요청을 실행합니다.
curl -X GET 'localhost:9200/index_name/type_name/_search?pretty&q=title:66' -H 'Content-Type: application/json'

검색은 다음 형식의 요청을 받을 수 있습니다.

클라이언트

  • 경로에 따라 RestSearchAction에서 요청을 수신하고 처리를 시작합니다
  • RestSearchAction은 검색 매개 변수를 해석하고 검증하며 SearchRequest로 봉인하고 서버에서 이 요청을 처리할 Action:indices:data/read/search를 지정합니다

  • 서버 (master 노드)

  • Search Request의 index 구조에 상응하는 Shards Iterator(분할 교체기)에 따라shard Iterators는local Shards Iterator(현재 노드 분할 교체기(기본 노드에 색인 5개)가 있고remote Shard Iterators(기타 노드 분할 교체기)와 통합되어 검색 조건에 따라 검색 정책을 구축한다.그리고 모든shard를 훑어본다.
  • 검색 정책
  • 최대 분할 횟수 LONG 최대치 2^63-1
  • 한 조각만 있으면 검색 유형: QUERY_THEN_FETCH
  • 캐시 조회 여부
  • 분편의 최대 병발수를 두루 훑어보다Math.min(256, Math.max(노드 수, 1) * 노드 조각 수), 노드 기본 조각 수: 5


  • 비동기 요청 액션을 구성하여 요청을 각 노드로 전송하고 리셋을 기다립니다
  • 모든 노드를 돌아다니며 노드 조회 매개 변수인 ShardSearchTransportRequest 대상을 구성하여 각 노드에 대해 조회 작업을 수행합니다
  • 조회를 실행하는 단계에서 우선cache에서 캐시가 있는지 판단하고 캐시가 있으면 조회를 실행한다.캐시에 없으면QueryPhase 클래스의execute () 방법을 실행하고, 루틴의 검색기를 호출합니다.검색 색인에 대한 조회, 조회 성공 리셋 onShardResult 방법, docIds, 조회 실패 리셋 onShardFailure (계수 실패 상황, 사본 분할 조회 시도)
  • 조회 단계에서 문서의 관련성 점수를 계산하여 정렬에 사용합니다
  • Fetch 단계: 마스터가 각 노드에서 되돌아오는 docIds를 받은 후 데이터 Fetch 요청을 발기하여docId와 그 분할 ID를 통해 대응하는 분할 캡처 데이터에 도달한 후 데이터를 통합하여 클라이언트에게 되돌려줍니다

  • 대략적인 질의 순서 논리:

    검색 요약

  • Query 단계에서 알 수 있듯이 하나의 검색은 이 인덱스 아래의 모든 블록을 훑어보고 각각의 블록은 한 번의 검색을 실행하며 같은 수량의 문서 ID를 되돌려줍니다.예를 들어 검색 조건은 5개의 데이터를 조회하고 5개의 분할이 있으면 최종적으로 25개의 데이터를 조회하고 정렬한 후에 앞의 5개의 데이터를 추출한다
  • 조회와 계산권의 중점은 Lucene에서 완성되었고 집합은 ES에서 실현되었다
  • 검색은 모든 블록을 훑어보기 때문에 블록의 수량은 검색의 성능에 영향을 주고 블록의 수량도 ES가 탑재할 수 있는 최대 데이터량을 결정한다.그래서 구체적인 응용에서 양자 간에 균형을 선택해야 한다
  • 문서 권중 점수를 계산하고 매번 검색할 때마다 검색 조건에 따라 다시 계산하여 검색 성능에 큰 영향을 미친다

  • 시리즈

  • 검색엔진 ElasticSearch 원본 컴파일과 디버그 환경 구축
  • 검색엔진 ElasticSearch의 시작 과정
  • Elasticsearch 색인 생성 프로세스
  • Elasticsearch 검색 과정 상세
  • Elasticsearch 검색 관련성 정렬 알고리즘 상세
  • Elasticsearch의 역렬 인덱스
  • 좋은 웹페이지 즐겨찾기