MySQL在Ruby on Rails上的全文搜索

col*_*rco 9 mysql full-text-search ruby-on-rails

我正在尝试用MySQL实现基本的全文搜索.

我写了这个迁移:


def self.up
  execute 'ALTER TABLE photos ENGINE = MyISAM'
  execute 'CREATE FULLTEXT INDEX fulltext_photos ON photos (place, info)'
end

def self.down
  execute 'ALTER TABLE photos ENGINE = InnoDB'
  execute 'DROP INDEX fulltext_photos ON photos'
end
Run Code Online (Sandbox Code Playgroud)

这是我的模特:


def self.search(*args)
  options = args.extract_options!
  find_by_sql [ "SELECT * FROM photos WHERE MATCH (place, info) AGAINST (?)", options[:query] ]
end
Run Code Online (Sandbox Code Playgroud)

问题是这段代码总是返回一个空数组.

例如:

% Photo.find(:first)
=> Photo id: 1, place: "Baceno", info: "Era immerso in erba alta." ... 

% Photo.search(:all, :query => 'baceno')
=> []

use*_*447 10

我创建了一个项目(Rails 2.3.2,Ruby 1.9.1 MySQL 5.0)来模拟这个.在数据库中有一条记录,我得到了相同的结果.当我添加更多记录时,Photo.search命令找到了记录.

这可能是因为"50%或更多行中存在的单词被认为是常见且不匹配". 参考.

50%阈值不适用于二进制模式.参考.

IN BINARY MODE属于括号内:AGAINST('baceno'IN BOOLEAN MODE)