簡體   English   中英

Rails - Postgresql - 全文搜索 - Railscasts 343

[英]Rails - Postgresql - Full text search - 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'

我刪除了所有注釋行。

PS:為了清楚,在我添加“ransack”之前,我遇到了同樣的問題。

在Ryan的例子中,文章必須讓超人和角色在結果中返回。 它不是我認為你希望它的方式。 那是全文搜索的地方(在劇集的后面)

我幾乎完全遵循了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')

它可以工作並返回在標題或內容中包含“因為”的文章

  • 我使用'標題'而不是名字

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM