2008-12-16 134 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,我通常不会陷入困境,试图以某种特定的方式获得某些东西。这完全是关于敏捷;)你看。