엘라스틱서치는 score 알고리즘으로 okapi BM25 를 사용한다.
BM25는 TF-IDF의 변형으로, TF-IDF에 비해 다음과 같은 특징을 가진다.
- 문서 길이가 짧을수록
- 다른 문서에는 검색어가 등장하지 않을수록
- 문서에 검색어 빈도수가 클수록
높은 점수가 매겨진다.
score(D,Q)=i=1∑nIDF(qi)⋅f(qi,D)+k1⋅(1−b+b⋅avgdl∣D∣)f(qi,D)⋅(k1+1)
- f(qi,D) : D 문서에 qi가 등장하는 빈도수
- ∣D∣ : D 문서의 길이
- avgdl : 모든 문서 길이의 평균
- ki : TF의 영향에 대한 가중치
k보다 TF가 작으면 score를 높이고 크면 낮춘다.
보통 1.2 ~ 2.0, elasticsearch는 1.2 사용
- b : 전체 문서 길이 평균 대비 D 문서의 길이에 대한 가중치.
클수록 문서의 길이이 점수에 미치는 영향이 커짐. (b=0 이면 문서의 길이 고려 X)
보통 0.75
IDF(qi)=ln(n(qi)+0.5N−n(qi)+0.5+1)
- n(qi) : qi가 포함된 문서 개수