全文検索入門(tsvector、to_tsquery)
tsvectorで文書にインデックスを作成し、to_tsqueryで自然言語クエリを実行し、ts_rankで結果を順位付けします。
「全文検索入門(tsvector、to_tsquery)」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。
全文検索とは
LIKE/ILIKEは部分文字列を検索します。一方、全文検索(FTS)は単語を理解し、語幹化、ストップワード、言語規則、関連度による順位付けに対応します。PostgreSQLに組み込まれているため、拡張機能は必要ありません。
2つの基本型
FTSは2つの型を基盤としています。
tsvector— 解析済みの文書:語彙素と位置tsquery— 解析済みのクエリ:語彙素とブール演算子
@@ 演算子で両者を照合します。
文書の解析
生のテキストをtsvectorに変換します。
SELECT to_tsvector('english', 'The quick brown foxes jump over the lazy dogs');
-- 'brown':3 'dog':9 'fox':4 'jump':5 'lazi':8 'quick':2
-- Stop words ('the', 'over') dropped; words stemmed (foxes → fox)クエリの解析
検索入力も同様に処理します。
SELECT to_tsquery('english', 'foxes & dogs');
-- 'fox' & 'dog'照合
@@ を使ってテストします。
SELECT to_tsvector('english', 'The lazy fox')
@@ to_tsquery('english', 'fox'); -- TRUE文書テーブルへのインデックス作成
tsvector列とGINインデックスを追加して、クエリを高速化します。
CREATE TABLE articles (
id BIGSERIAL PRIMARY KEY,
title TEXT NOT NULL,
body TEXT NOT NULL
);
-- Either keep a generated tsvector column:
ALTER TABLE articles
ADD COLUMN search_doc tsvector
GENERATED ALWAYS AS (
to_tsvector('english',
coalesce(title,'') || ' ' || coalesce(body,'')
)
) STORED;
CREATE INDEX articles_search_idx ON articles USING GIN (search_doc);検索
インデックスを使うと、クエリを高速に実行できます。
SELECT id, title
FROM articles
WHERE search_doc @@ to_tsquery('english', 'postgres & json')
ORDER BY id DESC;クエリ内のブール演算子
tsqueryは &(AND)、|(OR)、!(NOT)、およびグループ化をサポートします。
to_tsquery('english', '(cat | dog) & !rabbit');フレーズ検索
隣接する単語を検索するには <-> を使用します。
to_tsquery('english', 'postgres <-> performance');
-- finds 'postgres performance', not 'postgres is great for performance'Web向けの使いやすいクエリ:websearch_to_tsquery
Google形式のクエリを受け付けます。
SELECT websearch_to_tsquery('english', 'postgres "json indexing" -mongo');検索結果の順位付け
ts_rank または ts_rank_cd で順位を付けます。
SELECT id, title,
ts_rank(search_doc, query) AS rank
FROM articles, to_tsquery('english', 'postgres & json') AS query
WHERE search_doc @@ query
ORDER BY rank DESC
LIMIT 20;ハイライト表示
一致したスニペットを表示します。
SELECT ts_headline('english', body,
to_tsquery('english', 'postgres & json'),
'StartSel=<mark>,StopSel=</mark>')
FROM articles
WHERE search_doc @@ to_tsquery('english', 'postgres & json');振り返り
FTSはPostgreSQLに組み込まれています。
tsvector+tsquery+@@- 高速化にはGINインデックス
- ユーザー入力にはwebsearch_to_tsquery
- 関連度順の並べ替えにはts_rank
確認問題
tsvectorとtsqueryを照合する演算子はどれですか?
よくある質問
「全文検索入門(tsvector、to_tsquery)」レッスンは無料ですか?
はい。「全文検索入門(tsvector、to_tsquery)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。
「全文検索入門(tsvector、to_tsquery)」で何を学びますか?
tsvectorで文書にインデックスを作成し、to_tsqueryで自然言語クエリを実行し、ts_rankで結果を順位付けします。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
SQL Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「全文検索入門(tsvector、to_tsquery)」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSQL Academyレッスンでコードを書いて実行できますか?
はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 連結:||とCONCAT
- UPPER、LOWER、SUBSTRING、REPLACE
- TRIM、LPAD、RPAD
- 全文検索入門(tsvector、to_tsquery)