我正在尝试使用 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
这是我的模型:
def self.search(*args)
options = args.extract_options!
find_by_sql [ "SELECT * FROM photos WHERE MATCH (place, info) AGAINST (?)", options[:query] ]
end
问题是这段代码总是返回一个空数组。
例如:
% Photo.find(:first) => Photo id: 1, place: "Baceno", info: "Era immerso in erba alta." ... % Photo.search(:all, :query => 'baceno') => []
最佳答案
我创建了一个项目(Rails 2.3.2,Ruby 1.9.1 MySQL 5.0)来模拟这个。通过数据库中的一条记录,我得到了与您相同的结果。当我添加更多记录时,Photo.search 命令找到了该记录。
这可能是因为“出现在 50% 或更多行中的词被认为是常见的并且不匹配”。 Ref.
50% 的阈值不适用于二进制模式。 Ref.
IN BINARY MODE 属于括号内:AGAINST ('baceno' IN BOOLEAN MODE)
关于Ruby on Rails 中的 MySQL 全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1039512/