개념 정리
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 알고리즘을 도입하면서 해결됨
- BM25 알고리즘은 Non-linear Term Frequency Saturation을 통해 해결
- Non-linear Term Frequency Saturation는 term는 가중치 상한이 존재하기 때문에 많이 발생하더라도 TF/IDF만큼 가중치가 엄청 높아지지 않음
- 자세한 내용은 https://www.elastic.co/kr/blog/practical-bm25-part-2-the-bm25-algorithm-and-its-variables
- 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 |