Elasticsearch 정리

최강일·2022년 5월 11일
0

Elasticsearch

목록 보기
4/4

공식 Doc 검색편 목차

Search your data

  • Collapse search(축소 검색) : 검색 결과 축소(특정 필드 집합군 검색)

  • highlighting : front에서 highlight된 형태의 문서 사용(ex : 태그와 함께 return)

  • Long-running searches : default 동기식 검색. 긴 대기 시간 방지를 위해, 비동기 실행 가능(부분적인 결과를 검색하고, 완전한 결과는 나중에 얻음)

  • Near real-time search : refresh하는 프로세스 설명

    • commit point 자료구조 사용 : 
  • Paginate search results : default 10. 요청을 받은 각 샤드는 적중 횟수와 이전 페이지 적중 횟수를 메모리에 로드-> jdbc next()와 같이 사용가능

  • Retriveve selected fields : fl 절에 관한 정리-> field contents 사용(_source X -> field가 mapping 고려.)

  • Search across clusters : 원격 클러스터 검색 지원

  • Search multiple data streams and indices : 옴니카트에 사용예정으로 해당 메뉴에 정리

  • Shard routing : 검색 요청을 데이터가 포함된 노드로 전달

  • Search templates : 따로 정리

  • Sort : 정렬 항목에 정리

    Query DSL

  • Query and filter context

  • Compound queries : 복합쿼리. 정리완료

  • Full text queries : 정리완료

  • Geo queries : 거리검색 참고

  • Joining queries : nested 참고

  • Match all

  • Span queries : 주로 학술,법률 정보 등 전문적인 문서들을 정교하게 찾기 위한 Low-level API 집합

  • Specialized queries : 전문 쿼리들인데 시간있을때 신규 기능들 참고(모음검색, 등등)

  • Term-level queries : term 검색. 정리완료

    Aggregation

  • Bucket : 하나 이상의 bucket을 가지는 aggregation(내부적으로 metrics를 가질 수 있음)

  • Metrics : numeric 필드의 aggregation(min,max,sum,avg)

  • Pipline : 외부 input으로 aggregation

    Shard

  • 데이터를 클러스터에 분산 저장하기 위한 단위(인덱스는 1 이상의 shard 구성.primary shard,replica)

  • 노드가 1개이면 replica 생성X. 데이터 가용성과 무결성을 위해 최소 3개의 노드로 구성

    • 가용성 : 서비스를 정상적으로 제공할 수 있는 상태(항상 서비스할 수 있는 시스템->가용성 높은 시스템)
    • 무결성 : 데이터의 정확성과 일관성을 유지하고 보증
    • primary shard : 처음 생성된 shard
    • replica : 복제본
  • shard 설정(index 생성과 같이 설정. 변경 불가X)

    • 50GB미만으로 설정 -> 큰 shard는 장애 시 복구 능력에 좋지 않음
    • shard 크기 관리 : 주,월 단위로 shard 크기를 적당히 크게 유지 -> 샤드 수 줄어듬
  • refresh : 루씬 세그먼트(불변) 형태로 저장 이후에 조회가 가능. 이러한 과정을 뜻함

    • refresh interval 대기
    • ?refresh 세팅
    • refresh api 설정(채택)
  • routing : 검색 요청을 데이터가 포함된 노드로 전달

  • merge : 세그먼트 수가 늘어나면, 주기적으로 더 큰 세그먼트로 병합. 병합 세그먼트 삭제 전에 병합을 위한 신규 세그먼트가 생성되며, 이 작업은 리소스에 민감하며 I/O에 큰 영향을 받음

    • index.merge.scheduler.max_thread_count : 한번에 병합할 수 있는 단일 샤드 최대 Thread 수
    • 기본값 : Math.max(1, Math.min(4, <> / 2))
    • Merge는 별도 Thread로 실행하며, 실행 가능한 Thread가 남아있지 않으면 대기함
  • force-merge : 색인이 중지된 상태에서 피크 시간을 피하여 수행(부하가 큼)

  • segment : 데이터를 색인할 때, 디스크에 불변의 루씬 세그먼트 형태로 저장(publish).segment는 검색에 영향을 많이줌. 세그먼트수가 많다면 파일 수 만큼의 IndexReader가 있어야 하며 그에 맞는 thread가 필요. 그래서 최적의 segment file의 크기와 수를 구해야 검색 성능을 확보 할 수 있음

    • segment 파일이 가질 수 있는 최대 문서 수 : Integer.MAX_VALUE (2,147,483,519)
    • 문서 하나의 최대 크기 :  2GB
    • 권장 segment
      • 문서 수 : 5000만 건 미만
      • 크기 : 2~5G(초과되면 병합 진행X)
      • 파일 수 : core 크기와 같거나 절반
    • ex : 10 core
      • segment file수 : 5개
      • 샤드 1개의 크기 : segment file수*2GB = 10GB
  • 인덱스 보관 주기

    • segment는 불변의 성질을 갖기 때문에, update는 해당 doc을 찾고, 삭제 대상으로 표시, merge일 때 삭제 수행. 새 버전의 doc 추가
    • ##mapping_test로 update 색인 모니터링(index 변경)
      green  open   mapping_test zz4UIYN0T-KSlPqNI81zbA   1   1         11            6    137.1kb         72.9kb
      green  open   mapping_test zz4UIYN0T-KSlPqNI81zbA   1   1         11            2    152.5kb         51.1kb
      green  open   mapping_test zz4UIYN0T-KSlPqNI81zbA   1   1         11           12     53.8kb         42.9kb
      green  open   mapping_test zz4UIYN0T-KSlPqNI81zbA   1   1         11           28    135.2kb         77.8kb
      #force merge
      green  open   mapping_test zz4UIYN0T-KSlPqNI81zbA   1   1         11           44     70.8kb         35.3kb
  • queryDSL : 혼합하고 일치 시킬 수 있는 다양한 쿼리 유형 지원(JSON 기반 Domain Specific Language)

  • Leaf query clauses : 특정 값 찾기(ex : match,term,range,exists...)

  • Compound query clauses : 복합 쿼리(bool,dis_max...)

    • bool : 여러 leaf절(must,should,must_not,filter...)을 결합
      - must :  일치하는 문서와 점수에 기여하는 절. cache X
      - filter : filter context에서 실행. score 무시. cache
      - should : should clause에 적어도 하나 일치하는 문서. cache X
      - must_not : 불일치하는 문서. filter context에서 실행. score 무시. cache
      - 중요 : bool query에 should만 있는 경우(should clause에 적어도 하나가 match) vs should + filter(하나도 match 되지 않아도 검색 대상)
      설명 : 위 동작의 전제 조건은 bool query 전체가 query context에 있을 때에 동작. 만약 bool 쿼리가 filter context에 있으면, filter나 must와 관계없이 최소 하나의 should clause가 match 되어야 함
    • boosting : positive
      • negative 쿼리와 일치하는 문서의 관련 점수를 낮추면서, positive 쿼리와 일치하는 문서 반환
    • constant_score : 일정한 점수
    • dis_max : 여러 쿼리절에서 dis_max와 일치하면 가점
    • function_score : (인기도,정확도,커스텀 알고리즘...)함수를 사용하여 반환된 점수를 수정
      • score 함수 계산 비용이 많이 들고, 필터링된 집합에서 점수를 계산하기에 충분한 경우에 유용
  • Full text query : analyzed text field 검색

    • intervals : 일치하는 용어의 순서와 근접성을 세밀하게 제어할 수 있는 full text 쿼리
    • match : full-text 쿼리를 수행하는 표준 쿼리
    • match_bool_prefix
    • match_phrase : match 쿼리와 유사하지만, 정확한 구 또는 단어 일치
    • match_phrase_prefix : match_phrase와 유사하지만 뒤에 *를 붙여 와일드카드 검색
    • multi_match : match 쿼리의 다중 필드 버전
    • combined_fields : 하나의 결합된 필드로 색인된 것처럼 여러 필드에 일치
    • query_string : Lucene 쿼리 문자열(and,or,not)
    • simple_query_string : query_string은 사용자에게 직접 노출하기에, 더 간단하고 강력한 구문 버전
  • Term-level queries -> keyword 필드

    • 구조화된 데이터(date range, IP address, price, ids)의 정확한 값을 기반으로 검색
    • full-text 쿼리와 달리 term을 analyze 하지 않음
      • exist
      • fuzzy : 유사한 용어
      • ids : doc id
      • prefix : 접두사를 포함하는 문서
      • range : 범위 내
      • term : text필드 X
      • terms : 하나 이상의 terms 검색
      • wildcard : *패턴과 일치하는 term
  • 총 조회수(track_total_hits)

    • track_total_hits : true
    • index.max_result_window static 설정
  • 필드 검색

    • fields 옵션(선호)
      • mappings 유형과 일치하는 값을 반환. alias 사용 가능. 날짜 데이터 format 지원
      • multi-value 때문에 배열로 지원
    • _source 옵션
  • text 필드 : 대소문자 구분, aggs,sort는 multi field로 구성

  • keyword 필드 : 대소문자 구분X, aggs,sort 사용가능

profile
Search & Backend Engineer

0개의 댓글