【问题标题】:Rails text search using array of keywords使用关键字数组进行Rails文本搜索
【发布时间】:2011-03-11 04:43:24
【问题描述】:

我有一个包含标题和内容的 Post 模型。

我想在该模型上实现文本搜索,将用户提交的表单拆分为一个数组,然后在标题和内容上搜索这些关键字。

例子

If the title is : Today its a nice day
and the content: Today I woke up at 7am and..

如果用户使用以下术语,我希望将其返回:"day woke 7am"

我不喜欢使用任何全文搜索,因为这是托管我的应用程序的 heroku 上的位 pricy

实现这样的 sql-search 的最佳实践是什么? 是否可以对我的结果应用一些权重? 谁能给我看任何代码sn-ps?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 search full-text-search


    【解决方案1】:

    我希望您将代码写入您的 Post 模型。我会做一个方法来

    1. 接受搜索字符串作为参数
    2. 小写搜索字符串并将其转换为数组 2a.我会考虑删除所有 1 或 2 个字符的单词
    3. 然后我会遍历帖子表。当我遍历每一行时,我会 -- 组合标题和正文,将组合小写,转为数组 -- 执行数组-数组操作,并保存结果为空数组的每个帖子
    4. 返回结果帖子

    这未经测试——我没有像你的 Post 模型那样方便的模型——但希望你能在这里得到我正在做的事情:

    def charlie_search(search_string) 输出数组 = [] Post.all.each 做 |p| output_array.push(p.id) if search_string.downcase.split - (p.title.downcase.split + p.description.downcase.split) == [] 结尾 Post.find(output_array) 结束

    我不明白在你的情况下什么是昂贵的。

    你可以在你的网站上放一个谷歌网站搜索框(我认为谷歌仍然有这项服务),让谷歌索引你所有的网页,然后当有人进行搜索时,他们会得到谷歌类型的搜索列表您的网站。

    无论如何,查找匹配项是像 Google 这样的搜索索引非常擅长的事情,我认为这也是其他答案所追求的——使用搜索索引来提供结果。

    【讨论】:

      【解决方案2】:

      为 Solr 试用 Sunspot

      http://github.com/outoftime/sunspot

      已编辑:

      以下内容可能对您有所帮助。

      Articles.find(:all, :conditions => ["match(title,body) against (?)", "Databases"] )
      

      这里的标题和正文是数据库列,关键字是“数据库”。 更多选项请查看 mysql 中的 match-against。

      http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

      【讨论】:

      • 感谢 Ashish 的回答,我已经明确表示我不想使用任何外部 gem,因为这对 heroku 来说代价高昂(addons.heroku.com/websolr),我正在寻找我自己的代码以sql方式。
      • 好多了,但我认为 postgresql 不允许这样:PGError: ERROR: syntax error at or near "against" 感谢您的宝贵时间
      【解决方案3】:

      一种超级简单的方法是使用 Ruby 的数组“-”方法:

      p 'got one' if 'day wake up 7am'.downcase.split(' ') - '今天是美好的一天 今天我早上 7 点起床'.downcase.split(' ') == []

      【讨论】:

      • 对不起,我没明白。你会把这段代码放在哪里?谢谢
      猜你喜欢
      • 2020-04-27
      • 2022-01-14
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 2010-11-02
      • 1970-01-01
      相关资源
      最近更新 更多