如何实现类似 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 的漂亮语法样式?