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 - Ruby on Rails Scaffold,其中数字作为数据库头

ruby-on-rails - 如何添加:format options to a named route in Rails?

python - PyMongo 在全文搜索中选择字段

mysql - MySQL全文检索中,如何检索只包含特定单词的文档?

html - 如何将数据从本地 phpmyadmin mysql 数据库复制到 godaddy cpanel mysql 数据库?

php - 两个项目共享相同的用户帐户

javascript - 将 Php 重写为 javascript 以与 iBeacons 一起使用

jquery - 使用rails4-autocomplete时,未捕获的类型错误: this.源不是函数

solr - 更改 Solr 搜索 UI Solritas

php - 通过 PHP 从 ajax 访问 MySQL 数据库