【问题标题】:Query with results approached like google search in rails查询结果的方法类似于 Rails 中的谷歌搜索
【发布时间】:2015-04-16 09:02:36
【问题描述】:

如何在活动记录轨道中获得类似谷歌搜索的结果查询?

example 1 :

User.all

result :
[{name: "john now", age: "14"}, {name: "desy awesome", age: "19"}]

example 2 :
User.where("name LIKE ?", "%jo%")

result :
[{name: "john now", age: "14"}]

我的问题是,当我搜索名称“johnnow”时,我想得到如下结果。示例:

User.where("name LIKE ?", "%johnnow%")

    result :
    [{name: "john now", age: "14"}]

怎么做?

【问题讨论】:

  • 你有多大的桌子users
  • 您需要某种字典来拆分字符串,例如如果john 出现在一个字符串中,然后在该处拆分字符串并搜索拆分项。
  • 您可以使用全文搜索库。例如thinking-sphinx

标签: ruby-on-rails activerecord where


【解决方案1】:

这类事情实际上是针对搜索引擎的,而不是针对 SQL 的。还有许多其他方式,您可能希望事物以模糊的方式匹配,例如区分大小写、拼写错误等。试图用复杂的 SQL 来覆盖这一切会让你慢慢发疯。

我为此使用Searchkick,但还有许多其他选择。您将需要一个搜索索引器,例如Elasticsearch 或 Solr,然后是某种宝石,可将其与您的 AcitveRecord 类联系起来。

将 Searchkick 用于 User 模型:

class User < ActiveRecord::Base
  searchkick
end

然后在终端:

User.reindex

然后搜索:

users = User.search 'johnnow'

【讨论】:

  • 我收到错误“用户 = 连接被拒绝 - connect(2) for "localhost" 端口 9200”
  • 您是否正确设置了弹性搜索?听起来你没有这个运行。使用 homebrew 在 Mac 上安装它,并确保在执行任何其他操作之前运行它。
  • 你说得对,我忘了运行 elastichsearch xD 谢谢@Matt Gibson
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多