2012-10-16 68 views
2

多種類型與單一類型的太陽黑子搜索有什麼優點和缺點?什麼是首選方式?多種類型與單一類型的太陽黑子搜索

我看了很多文檔,似乎無法找到答案。

實施例:

Sunspot.search(Post, Comment) do 
    with :blog_id, 1 
    fulltext 'hello' do 
    fields(:comment_body) 
    end 
end 

單的T實施例ype搜索有關聯的另一個型號:

class Post < ActiveRecord::Base 
    searchable do 
    text :comments do 
     comments.map { |comment| comment.body } 
    end 
end 

Post.search do 
    fulltext 'hello' do 
    fields(:comments) 
    end 
end 

看來我可以使用任一方法(多種類型或單一類型)實現相同的結果。

回答

2

在找到多種類型搜索的路徑之後,我們來看看是否可以爲我的問題提供一些答案。多類型的搜索

缺點

  • 大多數人希望返回是結果的同質列表/命中顯示。當您執行Sunspot.search(Type1,Type2等)或Sunspot.search時,默認情況下會搜索所有類型,然後調用.results會混合使用數據類型,從而難以在視圖中顯示。
  • 如果帖子有很多評論,並且我想查找在評論中有「xyz」的帖子,那麼Sunspot.search(Comment).results將返回一列評論,而不是我真正想要的帖子列表。我可以在評論結果/匹配中使用post_id來檢索帖子列表,但這是性能問題。
  • 要在多種類型上執行Sunspot.search.hits以獲取要顯示給視圖的通用字段列表很難。
  • 根據http://sunspot.github.com/sunspot/rails/docs/index.html,「太陽黑子對搜索是否適用於一種或多種類型完全不知道;唯一的限制是用於限制,排序等的列以所有正在搜索的類型相同的方式定義。」所有類型的列必須定義相同。

因此,單一類型搜索與關聯和映射到多個模型,它沒有任何這些問題,並可以輕鬆返回相同的結果,是首選恕我直言。

+0

在任何情況下,似乎更像是一個應用程序問題(用戶搜索的語義是什麼,以及如何建模?)而不是技術問題。 –

+0

嗨尼克 - 謝謝你對太陽黑子的評論和你的工作。要回答您的問題,用戶通過表單搜索以找到匹配的帖子列表。表單中有複選框,允許用戶搜索全部或部分選定的字段。並非所有字段都是Post模型的屬性,有些字段來自其他模型(如評論模型)。其他模型與Post模型相關聯。例如,發佈has_many:評論。因此,在用戶提交表單後,它會執行一個控制器的方法,然後該方法僅調用搜索模型方法來執行搜索。 – konyak

+0

我的問題只是一般(多種類型與單一類型搜索)。但是要分解它,1。我們是否應該在每個模型中放置可搜索塊,並且執行Sunspot.search(model1,model2等);或者我們應該將可搜索塊放入用戶關心的一個模型中,並使用映射關聯模型之間的數據。 2.什麼時候多種類型搜索方便?我看到很多關於單一類型的例子,很少有多種類型的例子。多種類型搜索沒有用或推薦? – konyak