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의 역렬 인덱스
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다: