★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

F.43. unaccent

unaccentは語彙素からアクセント(発音区分記号)を取り除く全文検索用の辞書です。 これはフィルタ処理を行う辞書、つまり、標準の動作と異なり、その出力が常に次の辞書(もしあれば)に渡されるものです。 これにより全文検索においてアクセントを無視した処理を行うことができます。

現在のunaccentの実装ではthesaurus辞書向けの正規化用辞書として使用することはできません。

F.43.1. 設定

unaccent辞書は以下のオプションを受け付けます。

rulesファイルの書式は以下の通りです。

unaccent.rulesは、ほとんどの欧州圏の言語で直接使用できる、より複雑な例です。 これはunaccentモジュールをインストールした時に$SHAREDIR/tsearch_data/にインストールされます。

F.43.2. 使用方法

unaccent拡張をインストールすることで、unaccent全文検索テンプレートとそれに基づくデフォルトのパラメータを持つunaccent辞書が生成されます。 unaccent辞書はRULES='unaccent'というデフォルトパラメータ設定を持ちます。これは標準のunaccent.rulesファイルを即座に使用可能にします。 次の例のようにパラメータを変更することができます。

mydb=# ALTER TEXT SEARCH DICTIONARY unaccent (RULES='my_rules');

また、このテンプレートに基づいた辞書を新規に作成することができます。

以下を行うことで、辞書の動作を確認することができます。

mydb=# select ts_lexize('unaccent','Hôtel');
 ts_lexize
-----------
 {Hotel}
(1 row)

全文検索設定にunaccent辞書を組み込む方法を示す例を以下に示します。

mydb=# CREATE TEXT SEARCH CONFIGURATION fr ( COPY = french );
mydb=# ALTER TEXT SEARCH CONFIGURATION fr
        ALTER MAPPING FOR hword, hword_part, word
        WITH unaccent, french_stem;
mydb=# select to_tsvector('fr','Hôtels de la Mer');
    to_tsvector
-------------------
 'hotel':1 'mer':4
(1 row)

mydb=# select to_tsvector('fr','Hôtel de la Mer') @@ to_tsquery('fr','Hotels');
 ?column?
----------
 t
(1 row)

mydb=# select ts_headline('fr','Hôtel de la Mer',to_tsquery('fr','Hotels'));
      ts_headline
------------------------
 <b>Hôtel</b> de la Mer
(1 row)

F.43.3. 関数

unaccent関数は与えられた文字列からアクセント(発音区別符号)を取り除きます。 基本的にこれはunaccent辞書のラッパです。しかし通常の全文検索以外の文脈で使用することができます。

unaccent([dictionary, ] string) returns text

下記は使用例です。

SELECT unaccent('unaccent', 'Hôtel');
SELECT unaccent('Hôtel');