2011-03-11 73 views
0

我有一个由标题和内容组成的Post模型。使用关键字数组进行Rails文本搜索

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

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

我想这一点,如果用户使用术语退货:"day woke 7am"

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

实现这样的sql搜索最好练习什么? 是否可以对我的结果应用一些权重? 任何人都可以看到我的任何代码片段?

回答

0

我会把你写入你的Post模型的代码。我会想办法让这将

  1. 接受搜索字符串作为参数
  2. downcase搜索字符串,并把它变成一个数组 2A的方法。我会考虑拿出所有的1或2字符的字
  3. 然后我会遍历帖子表。当我浏览每一行时,我会将 - 结合标题和正文,将组合排除在外,然后将其变为数组。 - 执行数组操作,并将结果为空数组的每个帖子保存起来
  4. 返回结果的帖子

这不是测试 - 我没有像得心应手发表您模型的模型 - 但希望你能得到我在这里做什么:

高清charlie_search (search_string) output_array = [] Post.all.each do | p | output_array.push(p.id)if search_string.downcase.split - (p.title.downcase.split + p.description.downcase.split)== [] end Post。find(output_array) end

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

您可以在您的网站上放置一个Google网站搜索框(我认为Google仍然具有该服务),并让Google为您的所有网页编制索引,然后当有人进行搜索时,他们会获得Google类型的搜索列表只是你的网站。

不管怎样,找到匹配的东西,像谷歌搜索索引是真的好,我认为这就是其他的答案都在驾驶 - 使用搜索索引提供结果。

0

尝试太阳黑子对Solr的

http://github.com/outoftime/sunspot

编辑:

以下可以帮助你。

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

这里标题和正文是数据库列,关键字是'数据库'。 有关更多选项,请在mysql中检查匹配。

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

+0

感谢您的回答Ashish, 我已经明确指出,我不想使用任何外部宝石,因为这是昂贵的heroku(http://addons.heroku.com/websolr),我正在寻找代码以我自己的SQL方式。 – Sharethefun 2011-03-11 05:24:18

+0

好得多,但我不认为PostgreSQL允许认为: PGError:错误:语法错误或接近“反对” 感谢您的时间 – Sharethefun 2011-03-11 06:41:58

0

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

P '有一个' 如果 '一天醒来7 am'.downcase.split(' ') - ' 今天它是一个美好的一天今天我醒来在上午7点和'.downcase.split('')== []

+0

对不起,我没有得到它。你会在哪里放这个代码?谢谢 – Sharethefun 2011-03-17 13:23:50

相关问题