数据仓库服务 GAUSSDB(DWS)-Thesaurus词典:操作步骤

时间:2024-10-16 16:27:23

操作步骤

  1. 创建一个名为thesaurus_astro的TZ词典。

    以一个简单的天文学词典thesaurus_astro为例,其中定义了两组天文短语及其同义词如下:
    1
    2
    supernovae stars : sn 
    crab nebulae : crab
    

    执行如下语句创建TZ词典:

    认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。

    1
    2
    3
    4
    5
    6
    CREATE TEXT SEARCH DICTIONARY thesaurus_astro (
        TEMPLATE = thesaurus,
        DictFile = thesaurus_astro,
        Dictionary = pg_catalog.english_stem,
        FILEPATH = 'obs://bucket_name/path accesskey=ak secretkey=sk region=rg'
    );
    

    其中,词典定义文件全名为thesaurus_astro.ths,所在目录为 "obs://bucket_name/path accesskey=ak secretkey=sk region=rg"。子词典pg_catalog.english_stem是预定义的Snowball类型的英语词干词典,用于规范化输入词,子词典自身相关配置(例如停用词等)不在此处显示。关于创建词典的语法和更多参数,请参见CREATE TEXT SEARCH DICTIONARY

  2. 创建词典后,将其绑定到对应文本搜索配置中需要处理的token类型上:

    1
    2
    3
    ALTER TEXT SEARCH CONFIGURATION english
        ALTER MAPPING FOR asciiword, asciihword, hword_asciipart
        WITH thesaurus_astro, english_stem;
    

  3. 使用TZ词典。

    • 测试TZ词典。
      ts_lexize函数对于测试TZ词典作用不大,因为该函数是按照单个token处理输入。可以使用plainto_tsquery、to_tsvector、to_tsquery函数测试TZ词典,这些函数能够将输入分解成多个token(to_tsquery函数需要将输入加上引号)。
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      SELECT plainto_tsquery('english','supernova star');
       plainto_tsquery 
      -----------------
       'sn'
      (1 row)
      
      SELECT to_tsvector('english','supernova star');
       to_tsvector 
      -------------
       'sn':1
      (1 row)
      
      SELECT to_tsquery('english','''supernova star''');
       to_tsquery 
      ------------
       'sn'
      (1 row)
      

      其中,supernova star匹配了词典thesaurus_astro定义中的supernovae stars,这是因为在thesaurus_astro词典定义中指定了Snowball类型的子词典english_stem,该词典移除了e和s。

    • 如果同时需要索引原始短语,只要将其同时放置在词典定义文件中对应定义的右侧即可,如下:
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      supernovae stars : sn supernovae stars
      
      ALTER TEXT SEARCH DICTIONARY thesaurus_astro (
          DictFile = thesaurus_astro,
          FILEPATH = 'file:///home/dicts/');
      
      SELECT plainto_tsquery('english','supernova star');
             plainto_tsquery       
      -----------------------------
       'sn' & 'supernova' & 'star'
      (1 row)
      

support.huaweicloud.com/sqlreference-dws/dws_06_0107.html