diff --git a/app/controllers/v1/search_controller.rb b/app/controllers/v1/search_controller.rb index 824fdef67fd2ee6dead8756e06e72f7cddf01d1b..0a281125d99f2c47d052261d5f788ce19c2643d0 100644 --- a/app/controllers/v1/search_controller.rb +++ b/app/controllers/v1/search_controller.rb @@ -44,7 +44,7 @@ class V1::SearchController < ApplicationController # GET v1/search/tag # GET v1/search/tag.json def tag - results = TagSearchService.search(Tag.find(tag_search_params[:id])) + results = TagSearchService.search(Tag.find(tag_search_params[:id]), 2) render json: paginate(results) end diff --git a/app/services/tag_search_service.rb b/app/services/tag_search_service.rb index 26c803d0d7b82df345f420b03c3c142847d1220f..0a1dafd173ea03942ff2c35f7fe139a5501d12d8 100644 --- a/app/services/tag_search_service.rb +++ b/app/services/tag_search_service.rb @@ -83,7 +83,8 @@ module TagSearchService # lo.tags.each {|t| print t.name+" | "} # # puts "" # end - return merged_los + + return merged_los.map { |lc| lc[0] } end def merge(search_los, relevant_los) @@ -113,27 +114,27 @@ module TagSearchService min = relevant_los.last[1] # puts "Max=#{max} Min=#{min}" if DEBUG - relevant_los.each do |rlo| - rlo[1] = max_boost*(rlo[1]*(1+PADM)-min)/(max-min) - # puts "#{rlo[1]}" if DEBUG + relevant_los.each do |rlc| + rlc[1] = max_boost*(rlc[1]*(1+PADM)-min)/(max-min) + # puts "#{rlc[1]}" if DEBUG end if max != 0 # puts "Changing search array format" if DEBUG search_los.each do |slo| - relevant_los.each_with_index do |rlo, index| - if slo.id == rlo[0] - slo.search_hit['_score'] = slo.search_hit['_score'] + rlo[1] + relevant_los.each_with_index do |rlc, index| + if slo.id == rlc[0].id + slo.search_hit['_score'] = slo.search_hit['_score'] + rlc[1] relevant_los.delete_at(index) end end - merged_los << [slo.id, slo.search_hit['_score']] + merged_los << [slo, slo.search_hit['_score']] # puts "#{merged_los[merged_los.length - 1][0]}: #{merged_los[merged_los.length - 1][1]}" if DEBUG end merged_los.push(*relevant_los) # puts "Sorting LOs...\n" if DEBUG # highest ranks first - merged_los = merged_los.sort_by { |lo| lo[1]*-1 } + merged_los = merged_los.sort_by { |lc| lc[1]*-1 } return merged_los end @@ -156,7 +157,7 @@ module TagSearchService # puts tag.name+" | "+ct[:id].to_s+" | "+ct[:rank].to_s+" | "+tags[ct[:id]][:rank].to_s if DEBUG tag.taggings.where(taggable_type: "LearningObject").each do |tagging| lo = tagging.taggable - if los_ranked[lo.id].nil? + if los_ranked[lo].nil? # Uncomment the next line if you want to sort by local tag frequency # los_ranked[lo.id] = relevance_frequency_rank(lo, close_tags) @@ -164,7 +165,7 @@ module TagSearchService # los_ranked[lo.id] = relevance_frequency_rank_global(lo, close_tags, freq_cluster) # Uncomment the next line if you want to sort by tag cluster rank - los_ranked[lo.id] = relevance_raw_rank(lo, close_tags) + los_ranked[lo] = relevance_raw_rank(lo, close_tags) # puts "Found lo of id=#{lo.id} with rank=#{los_ranked[lo.id]}" if DEBUG end end @@ -172,7 +173,7 @@ module TagSearchService # puts "Sorting LOs...\n" if DEBUG # highest ranks first - los_ranked = los_ranked.sort_by { |id, rank| rank*-1 } + los_ranked = los_ranked.sort_by { |lo, rank| rank*-1 } return los_ranked.first(limit) if limit > 0 return los_ranked end