mysql全文搜索为空

时间:2008-12-16 14:00:21

标签: sql mysql ruby-on-rails

我在带有MySQL后端的rails上使用ruby。我有一个名为notes的表,这是我用来创建它的迁移:

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')。它返回一个零集。任何人都能告诉我我做错了什么以及如何使全文搜索工作?

2 个答案:

答案 0 :(得分:7)

我只是在这里猜测,但文档说明:

  

自然语言搜索解释   搜索字符串作为短语   自然的人类语言(一个短语)   自由文本)。没有什么特别的   运营商。禁用词列表适用。   另外,存在的词语   考虑50%或更多行   常见且不匹配。全文   搜索是自然语言搜索   如果是IN自然语言模式   给定修饰符或者没有修饰符   给出。

因此,如果只有一行,并且它包含'test',则'test'存在于超过50%的行中,因此不被视为匹配。也许试试:

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

答案 1 :(得分:0)

虽然这可能无法解答您的具体问题,但我会继续使用FerretSolr作为搜索引擎,尤其是涉及大量文字时。两者都非常容易设置和强大的启动。 Ultrasphinx也是另一种选择。

使用RoR,我通常不会陷入困境,试图以某种特定的方式获得某些东西。这都是关于敏捷;)你看。