2008-12-16 158 views
0

我在使用MySQL後端的rails上使用ruby。我有一個表叫筆記,這裏是我用它來創建它的遷移:mysql全文搜索爲空

def self.up 
    create_table(:notes, :options => 'ENGINE=MyISAM') do |t| 
    t.string :title 
    t.text :body 

    t.timestamps 
    end 

    execute "alter table notes ADD FULLTEXT(title, body)" 

end 

我想要做的標題和正文字段的全文搜索。問題是全文搜索總是回到空白。例如,如果我將這一行添加到數據庫中:Title: test, Body: test。然後我運行這個查詢SELECT * FROM notes WHERE MATCH(title, body) AGAINST('test')。它返回一個零集合。任何人都可以告訴我我做錯了什麼,以及如何獲得全文搜索的工作?

回答

7

我只是猜測這裏,但文檔指出:

自然語言搜索解釋 搜索字符串作爲 自然人類語言(在 自由文本短語)的短語。沒有特殊的 運營商。停用詞列表適用。 另外,存在於 50%或更多行中的單詞通常被認爲是 ,並且不匹配。全文 搜索是自然語言搜索 如果給出了IN NATURAL LANGUAGE MODE 修飾符或者沒有修飾符是 。

因此,如果只有一行,並且它包含'測試',那麼'測試'出現在超過50%的行中,因此不被視爲匹配。也許嘗試:

SELECT * FROM notes WHERE MATCH(title, body) AGAINST('test' IN BOOLEAN MODE) 
0

雖然這可能並不回答您的具體問題,我只想繼續使用FerretSolr作爲搜索引擎,特別是當大量文字的參與。兩者都非常易於安裝,而且功能強大,可以啓動。 Ultrasphinx也是另一種選擇。

隨着RoR,我通常不會陷入困境,試圖以某種特定的方式獲得某些東西。這完全是關於敏捷;)你看。