使用 sunspot_solr 突出显示拥有的 object 中的字段

Highlighting a field from an owned object with sunspot_solr

我正在使用 sunspot_solr 在 rails 的 ruby 中实现快速查找。我正在通过一些项目 objects 进行全文搜索,但也想通过拥有的笔记的内容进行搜索。我将搜索设置为在用户键入时显示突出显示的命中结果。我可以获得代码以显示突出显示的结果或 return 注释中的命中,但不能同时显示两者。

编码为 return 注释结果:

在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:内容,: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 本质上是一样的,只是我在项目的 title/description 中添加了 :stored => true

然而,尽管尝试了多种选项来对笔记内容进行全文搜索并 return 突出显示笔记内容的结果,但我似乎无法弄清楚如何。每次我尝试添加任何类型的代码以使存储的笔记内容 and/or 突出显示时,代码都会停止工作。这是不可能的,还是我错过了正确的语法?

Solr 是 4.2.0 版本,Sunspot 是 2.1.1 版本

所以,在寻找解决方案的过程中,我发现了更多关于 solr 性能的信息。特别是存储字段与仅索引字段相比对性能的影响。我开始认为在 table 上存储字段与正在搜索的 table 具有 many-to-one 关系可能是不可能的,即使是这样,也不值得性能损失. http://wiki.apache.org/solr/SolrPerformanceFactors

因此,虽然在您键入时实时突出显示笔记中的文本的功能在理论上对我来说似乎非常好,但在实践中它太慢而没有用,所以我不仅没有为突出显示而烦恼注释,但我可能也会放弃存储描述,只显示标题中突出显示的匹配项。

所以我想问题的答案是"It might be possible, but definitely wouldn't be worth it even if it is."