Elastic Search

Elasticsearch 공부 정리 - 4

꾸준함. 2022. 12. 8. 01:03

개념 정리

 

1. How  Searching Works

 

  • client가 검색 요청을 하면 클러스터 내 노드 중 하나로 요청이 가고 해당 노드는 coordinating node가 됨
    • 기본적으로 모든 노드는 coordinating node가 될 수 있으며 HTTP 요청을 받을 수 있음
    • coordinating node는 다른 노드에게 쿼리를 전달하는 역할을 수행하고 검색 결과를 합쳐서 클라이언트에게 반환해주는 역할을 수행
  • coordinating node도 shard를 가지고 있으므로 자기 자신에 대해 검색 쿼리를 수행함
  • 이후에는 다른 노드 내 샤드(primary 혹은 replica)로 검색 쿼리를 브로드캐스팅하고 응답이 오면 결과들을 합치고 정렬한 뒤 클라이언트에게 결과를 반환
  • 특정 문서의 id를 요청하는 검색 쿼리의 경우 요청이 브로드캐스팅 되지 않고 해당 문서가 존재하는 샤드로 라우팅 됨

 

2. how to calculate relevance score

 

  • 기존에는 TF/IDF 알고리즘을 통해 연관도 점수를 구했는데 현재는 Okapi BM25 알고리즘을 사용
  • TF는 Term Frequency의 줄임말로 주어진 문서의 field 내 해당 term이 몇 번 등장하는지의 수치
    • term이 많이 등장할수록 연관성이 높아짐
  • IDF는 Inverse Document Frequency의 줄임말로 인덱스 내 term이 몇 번 등장하는지의 수치
    • term이 많이 등장할수록 연관성이 낮아짐
  • Field-length norm는 field 길이를 뜻함
    • 짧은 field에 등장하는 term이 길이가 긴 field에 등장하는 term보다 높은 점수를 받음
  • TF, IDF, Field-length norm은 문서가 추가되거나 업데이트될 때 계산됨 (index time)
    • 해당 값들은 특정 문서 내 주어진 term의 가중치를 계산하는데 쓰임
  • TF/IDF 알고리즘을 적용했을 때 문제점은 stop word의 가중치가 필요 이상으로 커진다는 것이 문제
    • 문서가 책의 전체 내용을 포함할 경우 양이 많기 때문에 a, the, with와 같은 stop word의 가중치가 높아짐
    • 따라서, TF/IDF 알고리즘의 경우 분석을 돌리기 전 stop word를 제거했었음
  • 위 문제는 BM25 알고리즘을 도입하면서 해결됨
 

Practical BM25 - Part 2: The BM25 Algorithm and its Variables

BM25 is the default similarity ranking (relevancy) algorithm in Elasticsearch. Learn more about how it works by digging into the equation and exploring the concepts behind its variables.

www.elastic.co

  • BM25 알고리즘은 모든 문서에서 동일한 방식으로 field를 처리하는 대신 각 field를 개별적으로 고려
    • 평균 field 길이를 고려하여 이 작업을 수행하기 때문에 가능한 부분
    • 즉, 짧은 제목 field와 긴 제목 field를 구분 가능
  • 검색 쿼리에서 query 절은 relevance score 측정
  • 검색 쿼리에서 filter 절은 relevance score 측정 안함
  • 따라서, 연관도를 계산할 필요 없을 경우 filter절 성능이 더 좋음

 

3. match query

 

  • term level 쿼리는 정확한 값을 검색할 때 유용
    • 문서 내에서 찾지 않고 inverted index에서 찾음
  • match level 쿼리는 분석 과정을 거친 뒤 진행
    • full-text 검색에 유리
  • match 쿼리를 elasticsearch에 전송하면 쿼리를 분석하고 분석 과정에서 나오는 각각의 term마다 term 쿼리를 bool 쿼리에 추가한 뒤 검색을 수행
  • boolean 연산은 default로 or로 설정되어 있는데 이럴 경우 term 쿼리는 should 객체로 구성됨
    • 즉, 이 중 하나라도 나오면 됨
  • boolean 연산이 all로 설정되어 있을 경우 term 쿼리는 must 객체로 구성됨
    • 모두 충족해야 함

 

이 둘은 같은 쿼리

 

 

 

마찬가지로 이 둘도 같은 쿼리

 

 

출처

Udemy (elasticsearch-complete-guide)

 

반응형

'Elastic Search' 카테고리의 다른 글

Elasticsearch 공부 정리 - 3  (0) 2022.12.05
[Elasticsearch] 설정 관련 정리  (0) 2022.11.16
[Elasticsearch] Components 정리  (5) 2022.10.12
[Elasticsearch] Lucene 간단 정리  (0) 2022.06.04
[Elasticsearch] update by query 정리  (0) 2021.07.22