6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
# File 'lib/lancelot/rank_fusion.rb', line 6
def reciprocal_rank_fusion(result_lists, k: 60)
return [] if result_lists.nil? || result_lists.empty?
result_lists = Array(result_lists)
validate_result_lists(result_lists)
return [] if result_lists.all?(&:empty?)
doc_ranks = build_document_ranks(result_lists)
rrf_scores = calculate_rrf_scores(doc_ranks, result_lists.size, k)
rrf_scores.sort_by { |_, score| -score }.map do |doc, score|
doc.merge(rrf_score: score)
end
end
|