思考Sphinx应用广泛搜索和处理结果

时间:2011-09-25 08:44:15

标签: ruby-on-rails ruby ruby-on-rails-3 full-text-search thinking-sphinx

用例是这样的:

我想让我的用户从单个文本框中搜索,然后在搜索结果页面上按类组织结果。

例如,假设我为Thinking Sphinx配置了以下模型:PostCommentUser。 (在我的情况下,我有大约10个模型,但为了清楚StackOverflow,我假装只有3个)

当我进行类似于ThinkingSphinx.search 'search term', :classes => [Post, Comment, User]的搜索时,我不确定迭代结果并构建我的页面部分的最佳方法。

我的第一个倾向是做类似的事情:

  1. 执行搜索
  2. 迭代返回的结果集并执行result.is_a?(ClassType)
  3. 根据ClassType,将项目添加到3个阵列中的1个 - @match_posts@matching_comments@matching_users
  4. 将这3个实例变量传递给我的视图
  5. 有更好或更有效的方法吗? 谢谢!

2 个答案:

答案 0 :(得分:0)

如果您只有3个模型可供搜索,那么为什么不仅使用model.search而不是ThinkingSphinx.search。这样可以解决您执行result.is_a?的问题。这意味着您可以更轻松地处理每个model显示结果的方式。

答案 1 :(得分:0)

我认为这取决于人们使用您网站的有用之处。在所有模型中运行相同的查询是否有意义?然后ThinkingSphinx.search可能是最好的,尤其是从绩效角度来看。

那就是说,你想按各自的课程对搜索结果进行分组吗?然后一些排序是必要的。或者你是否将每个类的结果分开,就像GitHub搜索一样?然后拥有单独的集合可能是值得的,就像你已经想到的那样。

在最基本的层面上,您可以返回按相关性而不是类别排序的所有内容,然后根据每个结果呈现略有不同的输出。案例陈述可能对此有所帮助 - 最好在助手和/或可能部分中保留尽可能多的逻辑?

相关问题