Rails-Postgresql-全文搜索-Railscasts 343



我正在遵循PostgreSQL中的Railscasts#343全文搜索,一开始我遇到了一个问题。

我在我的模型中替换了这一行:

where("name ilike :q or content ilike :q", q: "%#{query}%")

通过

where("name @@ :q or content @@ :q", q: query)

但是,它仍然不能像他在铁轨上那样进行搜索。如果在名称中有"FOO",在内容中有"BAR",并且如果搜索"FOO BAR"则结果为空。(就像旧代码和"ilike"功能一样)

SQL请求如下所示:

* FROM "posts" where (name @@ 'foo bar' or content @@ 'foo bar')

我在Windows 7 x64上使用PostgreSQL 9.2.2、Rails 3.2.6和Ruby 1.9.3p125。

提前谢谢。

编辑

我的宝石文件:

    source 'https://rubygems.org'
gem 'rails', '3.2.6'
gem 'pg'
gem "ransack"

group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-rails'

我删除了所有评论行。

附言:需要澄清的是,在我添加"洗劫"之前,我也遇到了同样的问题。

在Ryan的例子中,文章必须同时具有超人AND字符才能在结果中返回。这不是我想你想要的OR。这就是全文搜索的作用(本集稍后)

我只是几乎完全遵循了railscast代码。

此代码

class Article < ActiveRecord::Base
  attr_accessible :content, :title
  def self.text_search(query)
    if query.present?
      where("title @@ :q or content @@ :q", q: query)
    else
      scoped
    end
  end
end

生成此SQL

SELECT "articles".* FROM "articles" WHERE (title @@ 'because' or content @@ 'because')

它工作并返回在标题或内容中具有"因为"的文章

  • 我用了"title"而不是name

相关内容

  • 没有找到相关文章

最新更新