如何实现类似 Stack Overflow 的搜索

Posted

技术标签:

【中文标题】如何实现类似 Stack Overflow 的搜索【英文标题】:How to implement search like Stack Overflow 【发布时间】:2011-03-10 03:38:57 【问题描述】:

我已经使用Sphinx 和Thinking Sphinx 实现了全文搜索。 我想添加按列搜索。比如:-(以 Stack Overflow 为例)

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

  user:me

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

如果你输入

 votes:15

然后它将返回一个结果,其中包含所有标记为超过 15 票的问题。

如果你输入

  user:me votes:15

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

我该如何实现这个东西?

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

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

【问题讨论】:

【参考方案1】:

: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 应该足够了)

两件重要的事情:

    如果你想统计相关对象(例如响应),你应该使用计数器缓存 如果你的“用户”是多态关联,我推荐"CRC32(CONCAT(user_type, user_id))"而不是user.id

【讨论】:

以上是关于如何实现类似 Stack Overflow 的搜索的主要内容,如果未能解决你的问题,请参考以下文章

如何在表单中实现类似 Stack Overflow 的水印?

如何在网页上显示代码示例,并使用类似 Stack Overflow 的漂亮语法样式?

Stack Overflow相关问题算法

Stack Overflow 是如何实现缓存的?

创建类似于 Stack Overflow 的“此问题的简短永久链接”的简短永久链接

Stack Overflow访问问题的处理