본문 바로가기
학습/Elasticsearch

[es] 초보자가 헷갈렸던 개념 정리

by KKambi 2021. 6. 16.

최근에 Elasticsearch를 공부하고 있는데요. 하면 할 수록 헷갈리는 개념들이 많아 제가 아는 만큼 간단히 정리해보려 합니다. 틀린 부분이 있으면 바로 댓글 달아주세요!

참고로 ES에 입문하기에 해당 가이드만큼 쉬운 게 없다고 생각합니다. 저는 종민북이라 불러요 :)

 

Elastic 가이드 북

 

esbook.kimjmin.net

 

 

정리 (6/3)

  1. RDB의 Database / Table / Row를 ES의 Index / Type / Document라고 대응시키곤 한다. 그런데 이는 잘못된 설명이다. ES 7 버전에선 하나의 인덱스에 하나의 타입만 설정할 수 있다(사실상 쓰지 말라고 한다). 따라서 인덱스를 하나의 테이블, 도큐먼트를 하나의 로우와 비슷하다 해도 무방하다.
  2. bool query : 복잡한 쿼리를 구현하기 위해 여러 쿼리를 조합한 쿼리
  3. bool query의 인자는 must, must_not, should, filter 4가지
  4. bool query 인자들 안에 필요한 쿼리들(match, match_phrase, term, range, ...)들을 배열로 넣는 방식
  5. ES에서 색인한다 = 역색인 구조로 토큰에 문서 ID를 저장한다.
  6. text 필드타입 : analyzer를 사용해, 토큰 단위로 쪼개어 색인한다.
  7. keyword 필드타입 : analyzer를 사용하지 않고, 입력된 문자열을 그대로 하나의 토큰으로 색인한다.
  8. (불확실) 전문검색(Full-Text Search) : "나는 밤에 잠을 잤다"와 같은 텍스트를 분석하여 여러 토큰으로 저장하면 특정 문자열을 검색할 수 있다. 문자열에 특수한 인덱스를 생성해 빠르게 검색할 수 있다
  9. 멀티필드 : 하나의 필드 값을 여러 방법으로 색인 가능. dynamic field mapping으로 문자열은 보통 text with .keyword로 저장된다. 또한 한 필드에 여러 analyzer를 적용 가능하다.
  10. 매핑 정보를 추가하는 건 가능하지만, 이미 생성된 매핑은 변경 불가
  11. 매핑 설정 시 문자열 analyze가 필요한지 / _source에 어떤 필드를 정의할 것인지 / 날짜 필드는 어떻게 매핑할 건지? / 매핑에 없는데 유입되는 필드는 어떻게 처리할 것인지? 고려
  12. boost는 이제 검색 시에만 설정 가능하다.
  13. 색인 boost는 field length normalization factor으로 relevancy에 영향을 주기 때문이다.
  14. _source 메타 필드는 원본 JSON 문서를 검색 결과로 표시하지만, 내부적으로는 색인된 정보가 저장된다.
  15. ES에서 Date 데이터 타입은 3가지로만 표현할 수 있다.
  16. 문자열이 포함된 날짜('2021/04.20') / ISO_INSTANT 포맷 날짜('2011-12-03T10:15:30Z') / 밀리세컨드
  17. Date 데이터 타입은 내부적으로 모두 UTC 밀리세컨드로 변환해서 저장한다.
  18. query 설명
    match 1. 검색어 analyze
    2. text 타입에 적합
    term 1. 검색어 analyze X
    2. keyword 타입에 적합
    match_phrase 1. 검색어 analyze
    2. 토큰들이 모두 일치 + 순서 일치하는 문서 반환
    3. slop 허용 (임의 검색어가 끼어드는 것)

 

 

정리 (6/16)

  1. Query context는 query clause와 문서가 얼마나(How) 잘 매칭되는지 따져보는 문맥이고, filter context는 query clause와 문서가 매칭되는지(Does) 따져보는 문맥이다.
  2. Query context에 속한 쿼리절은 relevance(관련성)을 계산하는 대신 캐싱되지 않고, filter context에 속한 쿼리절은 보통 캐싱된다.
  3. search API에 사용할 수 있는 쿼리 파라미터 중, query는 쿼리절을 정의하겠다는 뜻
  4. 모든 query clause는 query context 또는 filter context 둘 중 하나에 속한다.
  5. 모든 query clause는 compound query clause 또는 leaf query clause 둘 중 하나로 분류된다.
  6. Compound query clause는 다른 leaf / compound query를 포함하여, 복합적인 검색 조건을 만들거나 그들의 행동을 변경한다.
  7. Compound query clause의 대표적인 예시로 복합 검색을 만드는 boolean query(bool)이 있다. 행동을 변경시키는 constant_score query도 있다.
  8. Leaf query clause는 쿼리의 가장 마지막(leaf)에 위치하여, 검색할 필드의 값을 지정한다.
  9. Leaf query clause의 대표적인 예시로 match, match_phrase, term, range가 있다.
  10. Boolean query 중 must, should는 query context / must_not, filter는 filter context에 속한다.

 

댓글