受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: devel

F.11. dict_xsyn — 示例同义词全文检索词典 #

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

F.11.1. 配置 #

该词典接受以下选项:

  • 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.11.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;

提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。