Ruby on Rails 中的 MySQL 全文搜索

标签 mysql ruby-on-rails full-text-search

我正在尝试使用 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/

相关文章:

ruby-on-rails - 使用 Mercurial rails 进行身份验证

ruby-on-rails - rails - 关注的验证问题

java - 使用 jpa 2.1、Hibernate 4.3.7 和 C3P0 损坏管道

mysql - Node.js:如何从 axios get 请求中读取参数?

php - mySQL/PHP 实际发生了什么类型的错误

ruby-on-rails - RoR rspec 测试失败,错误为 <top (required)> 中的“block (2 levels)”

mysql - 全文搜索mysql中的撇号

sql-server-2008 - 我在 sql server 2008 中的全文索引选项是灰色的?

elasticsearch - 部分词搜索 - ElasticSearch 1.7.2

Heroku mysqldump 到远程主机