ruby-on-rails - 如何实现像Stack Overflow一样的搜索

标签 ruby-on-rails search

我已经使用 Sphinx 实现了全文搜索和 Thinking Sphinx 。 我想添加按列搜索。像这样的事情:-(以 Stack Overflow 为例)

假设您想查看与您相关的事件,只需键入:

  user:me

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

如果您输入

 votes:15

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

如果你输入

  user:me votes:15

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

我该如何实现这个东西?

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

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

最佳答案

:思维狮身人面像中带有选项。

首先,您必须在索引定义 ( 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

关于ruby-on-rails - 如何实现像Stack Overflow一样的搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3149790/

相关文章:

css - 如何在 Bootstrap 中实现图表?

algorithm - 滑动窗口搜索算法

php - 使用 mysqli 多重查询显示搜索结果

node.js - Sequelize | Node.js,在两个数字之间搜索

ruby-on-rails - 乘客 5/Capistrano

ruby-on-rails - 无法连接到 Heroku API,请检查互联网连接并重试

ruby-on-rails - 为 Rails 应用程序构建一个 ruby​​ gem

ruby-on-rails - 如何使用 ActiveRecord 连接设置事务隔离级别?

ruby - 如何使用 ElasticSearch 映射/查询这些数据?

php - 在搜索中使用 mysql 和 php 处理大量数据