全文検索によるプレフィックスマッチング
FTS はプレフィックス マッチングをサポートしています。クエリは次のように機能します。
SELECT * FROM tbl
WHERE to_tsvector('simple', string) @@ to_tsquery('simple', 'appl:*');
に追加されていることに注意して:*
くださいtsquery
。これはインデックスを使用できます。見る:
正規表現による代替
SELECT * FROM tbl
WHERE string ~ '\mappl';
ここでマニュアルを引用:
\m
.. 単語の先頭のみに一致
一致数で並べ替えるには、次を使用できますregexp_matches()
SELECT tbl_id, count(*) AS matches
FROM (
SELECT tbl_id, regexp_matches(string, '\mappl', 'g')
FROM tbl
WHERE string ~ '\mappl'
) sub
GROUP BY tbl_id
ORDER BY matches DESC;
またはregexp_split_to_table()
:
SELECT tbl_id, string, count(*) - 1 AS matches
FROM (
SELECT tbl_id, string, regexp_split_to_table(string, '\mappl')
FROM tbl
WHERE string ~ '\mappl'
) sub
GROUP BY 1, 2
ORDER BY 3 DESC, 2, 1;
ここでdb<>fiddle
古いsqlfiddle
Postgres 9.3 以降には、トリグラム GIN または GiST インデックスを使用した単純な正規表現のインデックス サポートがあります。Postgres 9.3 のリリース ノート:
pg_trgm に正規表現検索のインデックス作成のサポートを追加しました (Alexander Korotkov)
見る:
Depesz は、正規表現のインデックス サポートについてブログを書きました。