dict_xsyn(扩展同义词字典)是全文搜索附加字典模板的一个示例。这种字典类型将单词替换为其同义词组,因此可以使用一个单词的任意同义词来搜索它。
dict_xsyn 字典接受以下选项:
matchorig 控制字典是否接受原词。默认为 true。
matchsynonyms 控制字典是否接受同义词。默认为 false。
keeporig 控制原词是否包含在字典的输出中。默认为 true。
keepsynonyms 控制同义词是否包含在字典的输出中。默认为 true。
rules 是包含同义词列表的文件的基本名称。该文件必须存储在 $SHAREDIR/tsearch_data/ 中(其中 $SHAREDIR 表示 PostgreSQL 安装的共享数据目录)。其名称必须以 .rules 结尾(该后缀不包含在 rules 参数中)。
规则文件具有以下格式:
每一行代表一个单词的同义词组,该单词位于行首。同义词之间以空白分隔,如下所示:
word syn1 syn2 syn3
井号(#)是注释定界符。它可以出现在行中的任意位置,该行剩余部分将被跳过。
有关示例,请参阅安装在 $SHAREDIR/tsearch_data/ 中的 xsyn_sample.rules。
安装 dict_xsyn 扩展会创建一个文本搜索模板 xsyn_template,以及一个基于该模板、使用默认参数的字典 xsyn。你可以修改参数,例如
mydb# ALTER TEXT SEARCH DICTIONARY xsyn (RULES='my_rules', KEEPORIG=false); ALTER TEXT SEARCH DICTIONARY
也可以基于该模板创建新的字典。
要测试该字典,可以尝试
mydb=# SELECT ts_lexize('xsyn', 'word');
ts_lexize
-----------------------
{syn1,syn2,syn3}
mydb# ALTER TEXT SEARCH DICTIONARY xsyn (RULES='my_rules', KEEPORIG=true);
ALTER TEXT SEARCH DICTIONARY
mydb=# SELECT ts_lexize('xsyn', 'word');
ts_lexize
-----------------------
{word,syn1,syn2,syn3}
mydb# ALTER TEXT SEARCH DICTIONARY xsyn (RULES='my_rules', KEEPORIG=false, MATCHSYNONYMS=true);
ALTER TEXT SEARCH DICTIONARY
mydb=# SELECT ts_lexize('xsyn', 'syn1');
ts_lexize
-----------------------
{syn1,syn2,syn3}
mydb# ALTER TEXT SEARCH DICTIONARY xsyn (RULES='my_rules', KEEPORIG=true, MATCHORIG=false, KEEPSYNONYMS=false);
ALTER TEXT SEARCH DICTIONARY
mydb=# SELECT ts_lexize('xsyn', 'syn1');
ts_lexize
-----------------------
{word}
实际使用中需要按照 Chapter 12 所述将其纳入文本搜索配置。例如:
ALTER TEXT SEARCH CONFIGURATION english
ALTER MAPPING FOR word, asciiword WITH xsyn, english_stem;