2011-08-16 48 views
0

我有一個迷你博客應用程序,我希望用戶查看與他們正在閱讀文章展示頁面相關的文章。沒有sunspot_rails寶石,我會做這樣的事如何使用sunspot_rails gem搜索相關文章

在我的模型

def self.related_search(query, join = "AND") 
    find(:all, :conditions => related_search_conditions(query, join)) 
    end 

    def self.related_search_conditions(query, join) 
    query.split(/\s+/).map do |word| 
     '(' + %w[name description notes].map { |col| "#{col} LIKE #{sanitize('%' + word.to_s + '%')}" }.join(' OR ') + ')' 
    end.join(" #{join} ") 
    end 

然後在我看來,它會是這樣

@article.related_search 

,但我想用sunspot_rails寶石,使這種方式很容易。任何幫助。謝謝

+1

您是否閱讀過'sunspot_rails' gem文檔?這幾乎是一項微不足道的任務。 – RocketR

+0

不太好閱讀文檔 – Uchenna

+0

這是如此簡單與thinkingshipnx – Uchenna

回答

1

正如RocketR所提到的,這對太陽黑子來說是一個微不足道的用例。

首先,使用太陽黑子來指定你有三個字段被索引爲文本。

class Article < ActiveRecord::Base 
    searchable do 
    text :name 
    text :description 
    text :notes 
    end 
end 

然後發出搜索,很可能從控制器操作中進行搜索。下面的@search對象包含有關搜索響應的元數據,包括其方法results下的匹配對象。

@search = Article.search do 
    keywords query 
end 
@results = @search.results 

要找到類似於您已經加載了一個對象的其他文件,說在show動作,你可以調用more_like_this實例方法。這是一種特殊的搜索,它使用Solr的「More Like This」功能,並返回與上述全文搜索類似的搜索對象。您可以使用其results方法來呈現該搜索的結果。

<%= render @article.more_like_this.results %> 

more_like_this方法也接受類似的選項來搜索塊的塊,這樣你就可以有超過你如何判斷相似更多的控制。

希望有幫助!

+0

我會試試看,但在此之前,這將帶出我的節目行動的結果,由於我有'@article = Article.find(:id )'並顯示與我看到的相關文章 – Uchenna

+0

當然。已更新,以在太陽黑子中添加「more_like_this」的基本示例。 –

+0

非常有趣,這是否意味着'more_like_this'是太陽黑子的助手? – Uchenna