在文本搜索中没有正确地阻止同义词

时间:2016-05-10 14:08:06

标签: sql postgresql full-text-search

在PostgreSQL中,我有一个带有同义词词典的文本搜索配置,然后我使用了english_stem文件。问题是,例如,我将“tv”这个词作为“电视”的同义词。因此,当我输入:

SELECT to_tsvector('my_config', 'tv') returns 'television':1

然而

SELECT to_tsvector('my_config', 'television') returns 'televis':1

因此,我们看到在单词被传递到同义词词典后,词干词典忽略了它。

我的文本搜索配置写为:

ALTER TEXT SEARCH CONFIGURATION test_config
ALTER MAPPING FOR asciiword, word, hword, asciihword
WITH syn_file, english_stem

主要问题是我的搜索然后没有给出同义词的结果。

1 个答案:

答案 0 :(得分:0)

有两种解决方案:

  1. 您可以像这样创建同义词文件:
  2.   电视电视

    1. 您可以使用thesaurus dictionary

      代替同义词词典
      • 在目录$ SHAREDIR / tsearch_data中创建文件english.ths
        

      tv:television

      • 执行查询:
    2. CREATE TEXT SEARCH DICTIONARY en_ths (
          Template = thesaurus,
          DictFile = mythesaurus,
          Dictionary = pg_catalog.english_stem);
      CREATE TEXT SEARCH CONFIGURATION en_ths(COPY='simple');
      ALTER TEXT SEARCH CONFIGURATION en_ths
          ALTER MAPPING FOR asciiword, asciihword, hword_asciipart,
              word, hword, hword_part
          WITH en_ths, english_stem;
      

      现在你可以测试一下:

      test=# SELECT to_tsvector('en_ths', 'tv');
       to_tsvector 
      -------------
       'televis':1
      (1 row)
      
      test=# SELECT to_tsvector('en_ths', 'television');
       to_tsvector 
      -------------
       'televis':1
      (1 row)