↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / 全文检索组件 / 词典模板

synonym

synonym 词典:用同义词替换单词

当前查看 PostgreSQL 18.6。

说明

synonym 词典:用同义词替换单词

模板名称(tmplname)
synonym
初始化函数(tmplinit)
dsynonym_init
词法化函数(tmpllexize)
dsynonym_lexize

手册定义

这个词典模板用于创建把一个单词替换为同义词的词典。不支持短语(对此请使用分类词典模板第 12.6.4 节)。同义词词典可以用来克服语言学上的问题,例如防止英语词干分析词典把“Paris”约简成“pari”。只要在同义词词典中加入一行 Paris paris,并把该词典放在 english_stem 词典之前即可。例如:

SELECT * FROM ts_debug('english', 'Paris');
   alias   |   description   | token |  dictionaries  |  dictionary  | lexemes
-----------+-----------------+-------+----------------+--------------+---------
 asciiword | Word, all ASCII | Paris | {english_stem} | english_stem | {pari}

CREATE TEXT SEARCH DICTIONARY my_synonym (
    TEMPLATE = synonym,
    SYNONYMS = my_synonyms
);

ALTER TEXT SEARCH CONFIGURATION english
    ALTER MAPPING FOR asciiword
    WITH my_synonym, english_stem;

SELECT * FROM ts_debug('english', 'Paris');
   alias   |   description   | token |       dictionaries        | dictionary | lexemes
-----------+-----------------+-------+---------------------------+------------+---------
 asciiword | Word, all ASCII | Paris | {my_synonym,english_stem} | my_synonym | {paris}

synonym模板要求的唯一参数是SYNONYMS,它是其配置文件的基名 — 上例中的my_synonyms。该文件的完整名称将是$SHAREDIR/tsearch_data/my_synonyms.syn(其中$SHAREDIR表示PostgreSQL安装的共享数据目录)。该文件格式是每行一个要被替换的词,后面跟着它的同义词,用空白分隔。空行和结尾的空格会被忽略。

synonym模板还有一个可选参数CaseSensitive,默认值为false。当CaseSensitive为false时,同义词文件中的词会像输入词元一样折叠为小写。当它为true时,词和词元都不会被折叠为小写,而是按原样比较。

可以在配置文件中把星号(*)放在同义词末尾,表示该同义词是一个前缀。当该条目用于 to_tsvector() 时,星号会被忽略;但当它用于 to_tsquery() 时,结果将是一个带有前缀匹配标记的查询项(见第 12.3.2 节)。例如,假设在 $SHAREDIR/tsearch_data/synonym_sample.syn 中有以下条目:

postgres        pgsql
postgresql      pgsql
postgre pgsql
gogle   googl
indices index*

那么将得到如下结果:

mydb=# CREATE TEXT SEARCH DICTIONARY syn (template=synonym, synonyms='synonym_sample');
mydb=# SELECT ts_lexize('syn', 'indices');
 ts_lexize
-----------
 {index}
(1 row)

mydb=# CREATE TEXT SEARCH CONFIGURATION tst (copy=simple);
mydb=# ALTER TEXT SEARCH CONFIGURATION tst ALTER MAPPING FOR asciiword WITH syn;
mydb=# SELECT to_tsvector('tst', 'indices');
 to_tsvector
-------------
 'index':1
(1 row)

mydb=# SELECT to_tsquery('tst', 'indices');
 to_tsquery
------------
 'index':*
(1 row)

mydb=# SELECT 'indexes are very useful'::tsvector;
            tsvector
---------------------------------
 'are' 'indexes' 'useful' 'very'
(1 row)

mydb=# SELECT 'indexes are very useful'::tsvector @@ to_tsquery('tst', 'indices');
 ?column?
----------
 t
(1 row)

文档与源码

来源构建
版本
18.6
构建
https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2
来源指纹
555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f

版本比较

PostgreSQL 17 → 18: 无变化。

比较已记录的接口与属性,排除来源指纹和构建元数据。某个样本中没有记录,不能据此判断实际引入或移除的版本。

相关条目

导出 JSON · 返回全文检索组件 · 收录范围为 PostgreSQL 10 至 20;最早采样版本不一定是实际引入版本。