如何实现类似于Stack Overflow的搜索功能

6
我已经使用SphinxThinking Sphinx实现了全文搜索。我想添加列搜索功能,类似于以下示例(以Stack Overflow为例):
假设您想查看与您相关的活动,请键入:
  user:me

然后它将返回与派美子相关的所有问题和答案的结果。

如果您键入

 votes:15

然后它将返回一个结果,其中包含所有标记为具有超过15票的问题。如果您键入
  user:me votes:15

然后它将返回所有属于您且投票超过15的问题和答案。
我该如何实现这个功能?
目前,我的搜索结果是基于全文搜索的。如何包含这些功能?
Sphinx或Solr或任何其他搜索引擎中是否有可用选项?
1个回答

2

:with选项在thinking sphinx中的使用。

首先,在您的索引定义中定义这些属性(请参见此处的属性部分)。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接