개요
Fess 의 Rank Fusion 기능은 여러 검색 결과를 통합하여 보다 정확한 검색 결과를 제공합니다.
Rank Fusion이란
Rank Fusion은 여러 검색 알고리즘이나 스코어링 방법의 결과를 결합하여 단일 최적화된 랭킹을 생성하는 기술입니다.
주요 장점:
서로 다른 알고리즘의 장점을 결합
검색 정확도 향상
다양한 검색 결과 제공
지원 알고리즘
Fess 에서는 RRF (Reciprocal Rank Fusion) 알고리즘을 지원합니다.
RRF (Reciprocal Rank Fusion)
RRF는 각 결과의 순위 역수를 합산하여 스코어를 계산합니다.
계산식:
score(d) = Σ 1 / (k + rank(d))
k: 상수 파라미터 (기본값: 20)rank(d): 각 검색 결과에서 문서 d의 순위
설정
fess_config.properties
기본 설정:
# 윈도우 사이즈 (융합 대상 결과 수)
rank.fusion.window_size=200
# RRF의 rank_constant (k 파라미터)
rank.fusion.rank_constant=20
# 병렬 처리 스레드 수 (-1은 기본값)
rank.fusion.threads=-1
# 스코어 필드명
rank.fusion.score_field=rf_score
하이브리드 검색과의 연계
Rank Fusion은 키워드 검색과 시맨틱 검색을 결합한 하이브리드 검색에서 특히 효과적입니다.
사용 예
기본 하이브리드 검색
키워드 검색으로 BM25 스코어 계산
시맨틱 검색으로 벡터 유사도 계산
RRF로 양쪽 결과를 융합
최종 랭킹 생성
검색 플로우:
User Query
↓
┌──────────────────┬──────────────────┐
│ Keyword Search │ Semantic Search │
│ (BM25) │ (Vector) │
└────────┬─────────┴────────┬─────────┘
↓ ↓
Rank List 1 Rank List 2
└────────┬─────────┘
↓
Rank Fusion (RRF)
↓
Final Ranking
성능 고려 사항
메모리 사용량
여러 검색 결과를 보유하므로 메모리 사용량이 증가
rank.fusion.window_size로 융합 대상 최대 건수를 제한
# 융합 대상 윈도우 사이즈
rank.fusion.window_size=200
처리 시간
여러 검색을 실행하므로 응답 시간이 증가
rank.fusion.threads로 병렬 실행 스레드 수를 설정
# 병렬 실행 스레드 수 (-1은 기본값)
rank.fusion.threads=-1
문제 해결
검색 결과가 기대와 다름
증상: Rank Fusion 후 결과가 기대와 다름
확인 사항:
각 검색 유형의 결과를 개별적으로 확인
rank.fusion.rank_constant값을 조정rank.fusion.window_size값을 조정
검색이 느림
증상: Rank Fusion 활성화 시 검색이 느려짐
해결 방법:
rank.fusion.window_size를 줄이기:rank.fusion.window_size=100
rank.fusion.threads를 조정:rank.fusion.threads=4
메모리 부족
증상: OutOfMemoryError 발생
해결 방법:
rank.fusion.window_size를 줄이기JVM 힙 크기 늘리기