基本的なpgフルテキスト機能を備えたシンプルなRailsアプリに取り組んでいます。私のローカルPostgreSQL全文検索はうまく機能していましたが、突然2回機能しなくなりました(結果が生成されませんでした)。その間、まったく同じコードのコピーを持つ私のherokuアプリは正常に動作しています。いくつかの移行を行い、ローカルで「rakedb:reset」を実行したことが原因だと思います。「rakedb:drop; rake db:create; rake db:migrate」を実行してローカルデータベースのクリーンアップを開始することにより、「結果なし」の問題を修正する必要がありました。
私は何を見逃した/間違ったことをしましたか?どんな提案でも大歓迎です!!
私はここのチュートリアルに従っています。tsvectorは1つしかありません。tsvectorを追加した場合の移行は次のようになります。
class AddTSearchToQuestion < ActiveRecord::Migration
def self.up
execute(<<-'eosql'.strip)
ALTER TABLE questions ADD COLUMN tsv tsvector;
CREATE FUNCTION questions_generate_tsvector() RETURNS trigger AS $$
begin
new.tsv :=
setweight(to_tsvector('pg_catalog.english', coalesce(new.title,'')), 'A') ||
setweight(to_tsvector('pg_catalog.english', coalesce(new.details,'')), 'B');
return new;
end
$$ LANGUAGE plpgsql;
CREATE TRIGGER tsvector_questions_upsert_trigger BEFORE INSERT OR UPDATE
ON questions
FOR EACH ROW EXECUTE PROCEDURE questions_generate_tsvector();
UPDATE questions SET tsv =
setweight(to_tsvector('pg_catalog.english', coalesce(title,'')), 'A') ||
setweight(to_tsvector('pg_catalog.english', coalesce(details,'')), 'B');
CREATE INDEX questions_tsv_idx ON questions USING gin(tsv);
eosql
end
def self.down
execute(<<-'eosql'.strip)
DROP INDEX IF EXISTS questions_tsv_idx;
DROP TRIGGER IF EXISTS tsvector_questions_upsert_trigger ON questions;
DROP FUNCTION IF EXISTS questions_generate_tsvector();
ALTER TABLE questions DROP COLUMN tsv;
eosql
end
end