unaccent

PostgreSQL 9.0.0文書
前のページ | 巻戻し | 付録 F. 追加で提供されるモジュール | 早送り | 次のページ

# F.39. unaccent

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

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

## F.39.1. 設定

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

- このファイルは`$SHAREDIR/tsearch_data/`内に格納しなければなりません。（ここで`$SHAREDIR`はPostgreSQLインストレーションの共有データディレクトリを意味します。）この名前は`.rules`で終わらなければなりません。（`.rules`は`RULES`パラメータには含まれません。）

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

- 各行は、アクセント付き文字とその後にアクセントを取り除いた文字から構成される組み合わせを表します。一つ目が二つ目に変換されます。以下に例を示します。

      À        A
      Á        A
      Â        A
      Ã        A
      Ä        A
      Å        A
      Æ        A

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

## F.39.2. 使用方法

`unaccent.sql`インストールスクリプトを実行することで、`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.39.3. 関数

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

    unaccent([dictionary, ] string) returns text

下記は使用例です。

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

前のページ | ホーム | 次のページ
tsearch2 | 上に戻る | uuid-ossp