2012-10-16 71 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