無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

F.40. unaccent

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

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

F.40.1. 設定

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

  • RULES は翻訳規則の一覧を含むファイルのベースネームです。 このファイルは $SHAREDIR/tsearch_data/ 内に格納しなければなりません。(ここで $SHAREDIR PostgreSQL インストレーションの共有データディレクトリを意味します。) この名前は .rules で終わらなければなりません。( .rules RULES パラメータには含まれません。)

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

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

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

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

F.40.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.40.3. 関数

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

unaccent([


dictionary

, 
] 

string

) returns 
text

下記は使用例です。

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


powered by SEO.CUG.NET