2015-01-09 69 views
2

我正在使用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

回答

1

所以,在尋找解決這個問題,我已經發現更多關於Solr的表現。特別是你用來存儲字段而不是索引它們的性能。我開始認爲在表格上存儲與正在搜索的表格具有多對一關係的字段可能是不可能的,並且即使這樣,也不值得性能受到影響。 http://wiki.apache.org/solr/SolrPerformanceFactors

所以,儘管在鍵入時實時從筆記中突出顯示文本的功能在理論上看起來對我來說真的很不錯,但實際上它會太慢而無法使用,所以不僅我不打擾突出顯示筆記,但我可能也會放棄存儲描述,只顯示突出顯示的命中,如果他們在標題中。

所以我想這個問題的答案是「這可能是可能的,但即使它是肯定也不值得。」