如何实现Stack Overflow之类的搜索

时间:2010-06-30 13:40:23

标签: ruby-on-rails search

我已使用SphinxThinking Sphinx实施了全文搜索。 我想添加列式搜索。有点像:-(以Stack Overflow为例)

假设您想要查看与您相关的活动,只需输入:

  user:me

然后它会返回一个结果,其中包含与piemesons相关的所有问题和答案。

如果您输入

 votes:15

然后它将返回一个结果,所有问题都标记为超过15票。

如果你输入

  user:me votes:15

然后它将以超过15票的价格返回属于您的所有问题和答案。

我该如何实现这个?

现在我的搜索结果基于全文搜索。如何包含这些功能?

Sphinx或Solr或任何其他搜索引擎中可用的任何选项?

1 个答案:

答案 0 :(得分:2)

思考狮身人面像的

:with选项。

首先,您必须在索引定义中定义这些属性(check out attributes section here)。

has views_count, :as => :views, :type => :integer
has user.id, :as => :user, :type => :integer

然后你可以搜索这样的帖子:

Post.search '', :with => {:views => 12..maxint, :user => User.first.id}

(我不确定是否有更优雅的可能性给出开放范围,但12..max_int应该足够了)

两件重要的事情:

  1. 如果要计算相关对象(例如响应),则应使用计数器缓存
  2. 如果您的“用户”是多态关联,我建议使用"CRC32(CONCAT(user_type, user_id))"代替user.id