diff --git a/lib/ext/search_controller.rb b/lib/ext/search_controller.rb index f4b44ec..b2f97a8 100644 --- a/lib/ext/search_controller.rb +++ b/lib/ext/search_controller.rb @@ -102,28 +102,6 @@ class SearchController communities_list end - def sort_by_relevance list, text - queries = text.split - - list.sort! do |a, b| - found_in_a, found_in_b = 1, 1 - - relevance_list_a = yield(a) - relevance_list_b = yield(b) - - queries.each do |q| - relevance_list_a.count.times do |i| - found_in_a = (i * -1) if relevance_list_a[i].downcase.include?(q.downcase) - found_in_b = (i * -1) if relevance_list_b[i].downcase.include?(q.downcase) - end - end - - found_in_a <=> found_in_b - end - - list - end - def prepare_software_search_page prepare_software_infos_params prepare_software_infos_message diff --git a/lib/ext/search_helper.rb b/lib/ext/search_helper.rb index 55a231e..69671f8 100644 --- a/lib/ext/search_helper.rb +++ b/lib/ext/search_helper.rb @@ -6,4 +6,32 @@ module SearchHelper COMMON_PROFILE_LIST_BLOCK << :software_infos COMMON_PROFILE_LIST_BLOCK << :institutions + def sort_by_relevance list, text + text_splited = text.split + + relevance_map = {} + list.each do |element| + relevance_map[element] = yield(element) + end + + list.sort! do |a, b| + found_in_a, found_in_b = 1, 1 + + relevance_list_a = relevance_map[a] + relevance_list_b = relevance_map[b] + + text_splited.each do |q| + relevance_list_a.count.times do |i| + relevance = i * -1 + found_in_a = relevance if relevance_list_a[i].downcase.include?(q.downcase) + found_in_b = relevance if relevance_list_b[i].downcase.include?(q.downcase) + end + end + + found_in_a <=> found_in_b + end + + list + end + end -- libgit2 0.21.2