我正在使用sunspot_solr在rails上的ruby中实现quickfind。我是全文搜索一些项目对象,但也想搜索自有笔记的内容。我将搜索设置为在用户输入时显示突出显示的匹配结果。我可以让代码显示突出显示的结果或返回注释中的命中,但不能同时返回两者。
返回记录结果的代码:
Project.rb中的attr_accessible:title,:description has_many notes
searchable do
text :title, :boost => 5
text :description
text :notes do
notes.map(&:content)
end
end
在Project_controller.rb
中def quick
unless params[:q].nil? || params[:q].empty?
@search = Project.search do
fulltext params[:q]
end
@projects = @search.results
else
@projects = Project.none
end
respond_to do |format|
format.json { render :json => @projects }
end
end
在Note.rb中attr_accessible:content,:project_id belongs_to:project
突出显示匹配的代码,不搜索注释内容: Project_controller.rb
def quick
unless params[:q].nil? || params[:q].empty?
@search = Project.search do
fulltext params[:q] do
highlight :title
highlight :description
end
adjust_solr_params do |sunspot_params|
sunspot_params[:rows] = 15
end
end
@result = []
@search.each_hit_with_result do |hit, project|
@highlight = hit.highlight(nil)
@field_name = @highlight.field_name
@text = hit.highlight(nil).format { |word| "<span style='color: orange;'>#{word}</span>" }
@result << {:text => @text, :id => project.id, :fieldname => @field_name}
end
else
@result = []
end
respond_to do |format|
format.json { render :json => @result }
end
end
Project.rb和Note.rb在这里基本相同,只是我将:stored => true
添加到项目的标题/描述中。
然而,尽管尝试了多种选项来对笔记内容进行全文搜索并返回注释内容的突出显示结果,但我似乎无法弄清楚如何。每当我尝试添加任何类型的代码以使注释内容存储和/或突出显示时,代码就会停止工作。它是不可能的,还是我错过了正确的语法?
Solr版本为4.2.0,Sunspot版本为2.1.1
答案 0 :(得分:1)
因此,在寻找解决方案时,我发现了更多关于solr性能的信息。特别是你在存储字段时所采用的性能命中率,而不仅仅是索引它们。我开始认为在与正在搜索的表有多对一关系的表上存储字段可能是不可能的,即使它是,也不值得性能命中。 http://wiki.apache.org/solr/SolrPerformanceFactors
所以,虽然你在键入时实时突出显示文本中的文字的功能在理论上对我来说似乎非常好,但实际上它太慢而无法使用,所以我不仅不会因为突出显示音符而烦恼,但我可能也会删除存储描述,只显示突出显示的匹配,如果它们在标题中。
所以我认为问题的答案是&#34;它可能是可能的,但即使它是绝对不值得的。&#34;