太阳黑子搜索多种类型与单一类型

时间:2012-10-16 19:00:43

标签: ruby-on-rails solr sunspot sunspot-rails

多种类型与单一类型的太阳黑子搜索的优缺点是什么?什么是首选方式?

我查看了很多文档,似乎无法找到答案。

多种类型搜索的示例:

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

与另一个模型/类型关联的单一类型搜索示例:

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

似乎我可以使用任何一种方法(多种类型或单一类型)获得相同的结果。

1 个答案:

答案 0 :(得分:2)

在沿着多种类型搜索的路径前进之后,让我们看看我是否可以为我的问题提供一些答案。

多种类型搜索的缺点

  • 大多数人想要返回的是显示的结果/匹配的同类列表。当您执行Sunspot.search(Type1,Type2等)或Sunspot.search时,默认搜索所有类型,然后调用.results会混合使用数据类型,这使得在视图中显示起来更加困难。
  • 如果Post有很多评论,我想在评论中找到有“xyz”的帖子,那么Sunspot.search(评论).results将返回评论列表,而不是我真正想要的帖子列表。我可以在评论结果/点击中使用post_id来检索帖子列表,但这会影响性能。
  • 在多种类型上执行Sunspot.search.hits以获取要显示给视图的公共字段列表更加困难。
  • 根据http://sunspot.github.com/sunspot/rails/docs/index.html,“太阳黑子完全不知道搜索是针对一种或多种类型;唯一的限制是用于限制,排序等的列以相同的方式定义为所有类型搜索“。必须为所有类型定义相同的列。

因此,具有关联的单一类型搜索和映射到多个模型,这些模型没有任何这些问题并且可以轻松返回相同的结果,是首选恕我直言。