ユースケースの詳細によっては、tsquery
単語の接頭辞を照会するための構文があることを知っておく価値があるかもしれません。これをインデックス付きフィールドと組み合わせると、tsvector
単語のプレフィックスを非常に高速に検索できます。
「巨大な」テーブルを作成します。
CREATE TABLE huge_table (
field text,
field_tsv tsvector
);
インデックスを追加します。
CREATE INDEX field_tsv_idx ON huge_table USING gin(field_tsv);
インデックス付き列を更新するトリガーを追加します。
CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE
ON huge_table FOR EACH ROW EXECUTE PROCEDURE
tsvector_update_trigger(field_tsv, 'pg_catalog.english', field);
モックデータを追加する
INSERT INTO huge_table (field) VALUES ('something nice');
INSERT INTO huge_table (field) VALUES ('another thing');
次に、何らかの制限のあるプレフィックスをクエリします。
SELECT field FROM huge_table WHERE field_tsv @@ to_tsquery('anot:*') LIMIT 20;
field
---------------
another thing
(1 row)
インデックスがかなり大きくなる可能性があるため、特にインデックスの種類についてドキュメントを読んでください。