使用sunspot_solr突出显示某个拥有对象的字段

问题描述:

我正在使用sunspot_solr在rails上实现ruby的quickfind。我通过一些项目对象进行全文搜索,但也想搜索拥​​有的笔记的内容。我设置了搜索功能,以便在用户输入时显示突出显示的结果。我可以让代码显示突出显示的结果,或者在笔记中返回匹配,但不能同时返回。使用sunspot_solr突出显示某个拥有对象的字段

代码返回笔记结果:

在Project.rb attr_accessible:标题,说明 的has_many指出

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_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版本,太阳黑子是版本2.1.1

所以,在寻找解决这个问题,我已经发现更多关于Solr的表现。特别是你用来存储字段而不是索引它们的性能。我开始认为在表格上存储与正在搜索的表格具有多对一关系的字段可能是不可能的,并且即使这样,也不值得性能受到影响。 http://wiki.apache.org/solr/SolrPerformanceFactors

所以,尽管在键入时实时从笔记中突出显示文本的功能在理论上看起来对我来说真的很不错,但实际上它会太慢而无法使用,所以不仅我不打扰突出显示笔记,但我可能也会放弃存储描述,只显示突出显示的命中,如果他们在标题中。

所以我想这个问题的答案是“这可能是可能的,但即使它是肯定也不值得。”