企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# F.40\. unaccent `unaccent` 是一个文本搜索字典,它从词汇中去掉重音符号(变音标志符号)。 这是一个过滤词典,这意味着它的输出总是传递给下一个字典(如果存在的话),而不像常规行为的字典。 这允许对全文搜索进行重音不敏感的处理。 `unaccent`的当前实现不能用作一个`thesaurus`字典的规范字典。 ## F.40.1\. 配置 一个 `unaccent` 字典接受下面的操作: * `RULES` 是包含翻译规则列表的文件的基本名称。 这个文件必须存储在 `$SHAREDIR/tsearch_data/`文件夹下 (`$SHAREDIR` 是指 PostgreSQL安装时的数据共享文件)。 它的名字必须以`.rules`为后缀 (这个后缀无须出现在 `RULES`参数中)。 规则文件的格式如下: * 每一个行代表一个字符对,由带重音符号的字符跟着一个不带重音符号的字符组成。第一个字符将被翻译为第二个字符。例如: ``` À A Á A Â A Ã A Ä A Å A Æ A ``` 一个对大多数欧洲语言都直接有用的更完整的例子,可以在 `unaccent.rules`中找到,这个文件在 `unaccent`模块被安装时就被置于`$SHAREDIR/tsearch_data/`文件夹下。 ## F.40.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.40.3\. 函数 `unaccent()` 函数从一个给定的字符串中去掉重音符号(变音标志符号)。基本上,它是一个`unaccent`字典的包装,但它可以超出正常文本搜索的上下文使用。 ``` unaccent([`_dictionary_`, ] _string_) returns text ``` 例如, ``` SELECT unaccent('unaccent', 'Hôtel'); SELECT unaccent('Hôtel'); ```