Skip to content
Snippets Groups Projects
Commit ff6cc288 authored by bfs15's avatar bfs15
Browse files

Tag search now returning proper learning objects

parent 040cfc7f
No related branches found
No related tags found
No related merge requests found
...@@ -44,7 +44,7 @@ class V1::SearchController < ApplicationController ...@@ -44,7 +44,7 @@ class V1::SearchController < ApplicationController
# GET v1/search/tag # GET v1/search/tag
# GET v1/search/tag.json # GET v1/search/tag.json
def tag 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) render json: paginate(results)
end end
......
...@@ -83,7 +83,8 @@ module TagSearchService ...@@ -83,7 +83,8 @@ module TagSearchService
# lo.tags.each {|t| print t.name+" | "} # lo.tags.each {|t| print t.name+" | "}
# # puts "" # # puts ""
# end # end
return merged_los
return merged_los.map { |lc| lc[0] }
end end
def merge(search_los, relevant_los) def merge(search_los, relevant_los)
...@@ -113,27 +114,27 @@ module TagSearchService ...@@ -113,27 +114,27 @@ module TagSearchService
min = relevant_los.last[1] min = relevant_los.last[1]
# puts "Max=#{max} Min=#{min}" if DEBUG # puts "Max=#{max} Min=#{min}" if DEBUG
relevant_los.each do |rlo| relevant_los.each do |rlc|
rlo[1] = max_boost*(rlo[1]*(1+PADM)-min)/(max-min) rlc[1] = max_boost*(rlc[1]*(1+PADM)-min)/(max-min)
# puts "#{rlo[1]}" if DEBUG # puts "#{rlc[1]}" if DEBUG
end if max != 0 end if max != 0
# puts "Changing search array format" if DEBUG # puts "Changing search array format" if DEBUG
search_los.each do |slo| search_los.each do |slo|
relevant_los.each_with_index do |rlo, index| relevant_los.each_with_index do |rlc, index|
if slo.id == rlo[0] if slo.id == rlc[0].id
slo.search_hit['_score'] = slo.search_hit['_score'] + rlo[1] slo.search_hit['_score'] = slo.search_hit['_score'] + rlc[1]
relevant_los.delete_at(index) relevant_los.delete_at(index)
end end
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 # puts "#{merged_los[merged_los.length - 1][0]}: #{merged_los[merged_los.length - 1][1]}" if DEBUG
end end
merged_los.push(*relevant_los) merged_los.push(*relevant_los)
# puts "Sorting LOs...\n" if DEBUG # puts "Sorting LOs...\n" if DEBUG
# highest ranks first # 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 return merged_los
end end
...@@ -156,7 +157,7 @@ module TagSearchService ...@@ -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 # 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| tag.taggings.where(taggable_type: "LearningObject").each do |tagging|
lo = tagging.taggable 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 # Uncomment the next line if you want to sort by local tag frequency
# los_ranked[lo.id] = relevance_frequency_rank(lo, close_tags) # los_ranked[lo.id] = relevance_frequency_rank(lo, close_tags)
...@@ -164,7 +165,7 @@ module TagSearchService ...@@ -164,7 +165,7 @@ module TagSearchService
# los_ranked[lo.id] = relevance_frequency_rank_global(lo, close_tags, freq_cluster) # 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 # 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 # puts "Found lo of id=#{lo.id} with rank=#{los_ranked[lo.id]}" if DEBUG
end end
end end
...@@ -172,7 +173,7 @@ module TagSearchService ...@@ -172,7 +173,7 @@ module TagSearchService
# puts "Sorting LOs...\n" if DEBUG # puts "Sorting LOs...\n" if DEBUG
# highest ranks first # 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.first(limit) if limit > 0
return los_ranked return los_ranked
end end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment