unaccent

PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 附录 F. 额外提供的模块 | 下一页

# F.43. unaccent

`unaccent` 是一个文本搜索字典，它从词汇中去掉重音符号（变音标志符号）。 这是一个过滤词典，这意味着它的输出总是传递给下一个字典（如果存在的话），而不像常规行为的字典。 这允许对全文搜索进行重音不敏感的处理。

`unaccent`的当前实现不能用作一个`thesaurus`字典的规范字典。

## F.43.1. 配置

一个 `unaccent` 字典接受下面的操作：

- `RULES` 是包含翻译规则列表的文件的基本名称。 这个文件必须存储在 `$SHAREDIR/tsearch_data/`文件夹下 (`$SHAREDIR` 是指 PostgreSQL安装时的数据共享文件)。 它的名字必须以`.rules`为后缀 (这个后缀无须出现在 `RULES`参数中)。

规则文件的格式如下：

- 每一个行代表一个字符对，由带重音符号的字符跟着一个不带重音符号的字符组成。第一个字符将被翻译为第二个字符。例如：

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

一个对大多数欧洲语言都直接有用的更完整的例子，可以在 `unaccent.rules`中找到，这个文件在 `unaccent`模块被安装时就被置于`$SHAREDIR/tsearch_data/`文件夹下。

## F.43.2. 用法

在安装 `unaccent`扩展的时候，会创建一个`unaccent`文本搜索模版和一个基于这个模版的字典。 这个`unaccent`字典有一个默认的参数设置`RULES='unaccent'`，这使得标准的`unaccent.rules`配置可以立即生效。 如果有需要，你也可以改变这个参数，例如，

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

或者创建基于`unaccent`模版的新字典。

你可以试试下面的sql，来测试这个字典，

    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');

上一页 | 起始页 | 下一页
tsearch2 | 上一级 | uuid-ossp