2011-03-11 44 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

相關問題