개발/이것저것

fulltext vs elastic search 점수 계산 알고리즘

태감새 2023. 4. 26. 23:15

 

 

MySQL :: Rankings with InnoDB Full-Text Search

Summary Since MySQL 5.6 went GA—where among many other new features, we introduced full-text indexes for the InnoDB storage engine—questions have occasionally come up about InnoDB full-text search relevancy rankings when doing BOOLEAN MODE searches. Ty

dev.mysql.com

 

Elasticsearch는 검색을 어떻게 하는가?

혹시 이 글을 읽고 잘못된 부분이나, 추가할 부분이 있다면 Comment 부탁드리겠습니다. 01. 개요 Elasticsearch는 저장된 데이터를 탐색, 색인하기 위하여 Apache lucene이라는 full-featured text search engine libra

lazy-programmer.tistory.com

요약

mysql

rank_score = IDF * IDF * TF

  • IDF = log10( N / n )
    • N : 전체 row 수 (우리 기준 1000만개)
    • n : 검색된 키워드가 포함된 row 수
  • TF = 해당 Document에 포함된 keyword 수

예시

SELECT id, title, body, MATCH (title)  AGAINST ('database' IN BOOLEAN MODE) AS score FROM articles;
id title body
1 database test1
2 database article test2
3 perter pan test3
4 test test4
5 database databate test5
  • 공통요소

N = 5 (전체 row 수)

n = 3 (키워드인 database를 포함하는 row의 수 (id = 1,2,5))

IDF = log10(5/3)

  • 개별요소

id = 1

  • title에 database가 한 개 존재하므로 TF = 1
  • id = 2도 같은 이유로 TF = 1

id = 3

  • title에 database가 두 개 존재하므로 TF = 2
score = IDF * IDF * TF로 계산

Elastic Search

공식은 복잡하지만 mysql와 사용하는 요소는 비슷하다.

IDF에서 N은 mysql에서의 N과 같고 $n(q_i)$는 n과 같다.

N = 전체 row 수

q_i = 검색된 키워드

n(q_i) = 검색된 키워드가 포함된 row 수

f(q_i,D) = 해당 Document에서 포함된 키워드의 수 (mysql에서의 TF)

k_1, b = 가중 상수. 상수여서 크게 신경 안써도 될듯?

|D| = 현재 Document의 길이

avgdl = 검색된 Document의 평균 길이

'개발 > 이것저것' 카테고리의 다른 글

RDB와 NoSQL  (0) 2023.05.10
동기와 비동기  (0) 2023.05.07
Transaction이란?  (0) 2023.04.23
Circuit Breaker  (0) 2023.04.16
도커 (Docker)  (0) 2023.03.10