どういうわけか、私は自分自身をだまして、データベースでの全文検索の実装を作成してしまいました。データベース内のすべてのエンティティを表すテーブル、すべてのタグを表すテーブル、タグとエンティティの多対多の関係を表すテーブルがあります。
特定のエンティティのすべてのタグ名をグループ化し、それらを文字列に連結するクエリを作成し、それを ts_vector に変換します。そのクエリは次のようになります。
SELECT e.id, to_tsvector(c.publicname || ' ' || string_agg(cv.name, ' '))
FROM categoryvalue cv, entitycategoryvalue ecv, entity e
WHERE ccv.categoryvalueid = cv.id AND e.id = ecv.entityid
GROUP BY e.id;
クエリは、次のスキーマで結果を返します。
id | to_tsvector
1 | tag_a, tag_b, tag_c
2 | tag_b, tag_d, tag_e
これはまさに私が ts_query と照合したいものです。私はSQLの初心者ですが、作成したクエリの結果で継続的に更新されるテーブルを作成できる方法があるかどうか疑問に思っていますか?
編集:このブログ投稿http://tech.pro/tutorial/1142/building-faceted-search-with-postgresqlで最終的なソリューションとシステムを文書化しました