【问题标题】:Sunspot Search with Multiple Types vs. Single Type多种类型的太阳黑子搜索与单一类型
【发布时间】:2012-10-16 19:00:43
【问题描述】:

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

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

多类型搜索示例:

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

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

【问题讨论】:

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


    【解决方案1】:

    走完多类型搜索的道路,让我们看看我是否可以为我的问题提供一些答案。

    多类型搜索的缺点

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

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

    【讨论】:

    • 无论如何,这似乎更像是一个应用程序问题(用户搜索的语义是什么,如何建模?)而不是技术问题。
    • 嗨尼克 - 感谢您对太阳黑子的评论和工作。为了回答您的问题,用户通过表单搜索以查找匹配的帖子列表。表单中有复选框,允许用户搜索所有或部分选定字段。并非所有字段都是 Post 模型的属性,有些字段来自其他模型(如 Comment 模型)。其他模型与 Post 模型相关联。例如,发布 has_many :cmets。所以在用户提交表单后,它会执行一个控制器的方法,然后调用一个搜索模型方法来进行搜索。
    • 我的问题很笼统(多类型与单类型搜索)。但是要分解它, 1. 我们是否应该在每个模型中放置可搜索块,然后执行 Sunspot.search(model1, model2, etc);或者我们应该将可搜索块放在用户关心的一个模型中,并使用映射来关联模型之间的数据。 2. 多类型搜索什么时候方便?我看到很多关于单一类型的例子,很少有关于多种类型的例子。多类型搜索是否无用或不推荐?
    猜你喜欢
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2014-03-29
    相关资源
    最近更新 更多