PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

F.13. dict_xsyn — 扩展同义词全文搜索字典示例 #

F.13.1. 配置
F.13.2. 用法

dict_xsyn(扩展同义词字典)是全文搜索附加字典模板的一个示例。这种字典类型将单词替换为其同义词组,因此可以使用一个单词的任意同义词来搜索它。

F.13.1. 配置 #

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。

F.13.2. 用法 #

安装 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;