私はブラジルのポルトガル語で簡単な記事のウェブサイトを開発しています。検索機能は全文検索に基づいていますが、期待どおりの結果が返されません。
私はpostgresqlでこれを作りました。簡略化した表は次のとおりです。
Artigos
-id
-title -- article title
-intro -- article introduction
-content -- article body
-publishdate -- date of launch
-artigosts -- this will work as our fts index.
テーブルを作成した後、次のコマンドを実行しました。
UPDATE artigos SET artigosts =
setweight(to_tsvector('pg_catalog.portuguese', coalesce(title,'')), 'A') ||
setweight(to_tsvector('pg_catalog.portuguese', coalesce(intro,'')), 'B') ||
setweight(to_tsvector('pg_catalog.portuguese', coalesce(content,'')), 'C');
CREATE INDEX artigosts_idx ON artigos USING gist (artigosts);
CREATE TRIGGER artigosts_tg
BEFORE INSERT OR UPDATE ON artigos
FOR EACH ROW EXECUTE PROCEDURE
tsvector_update_trigger('artigosts', 'pg_catalog.portuguese', 'title', 'intro', 'content');
はい、検索には単純な重み付けを使用するつもりです。高速化するためのインデックス、トリガーを作成したので、インデックスの再作成などを気にせずに挿入および更新できます。
まあ、私の理解によれば、それはすべて問題ありません。しかし、結果はそうではありません。簡単な例。
1つの記事のコンテンツとして「... bancode dados ... nobanco...」があるとします。私がする時:
SELECT title, intro, content FROM artigos WHERE plainto_tsquery('banco de dados') @@ artigosts;
空のセットを返します。ts_vector列を確認し、述語「banc」と「dad」を確認しました。しかし、なぜそれが言及された記事を含む行を返さないのか理解できません。
誰かがこの質問に光を当てることができますか?