PostgreSQL 全文搜索 预定义配置

1 背景知识

文本搜索配置 是指,将文档转换为 tsvector 类型所需要的处理步骤。将包含以下两个部分。

  1. 第一部分:将文档分解成记号解析器
  2. 第二部分:将 记号 正规化为 词位词典

调用 to_tsvectorto_tsquery 函数,都需要执行以上两个步骤。

参数 default_text_search_config 可以指定默认的文本搜索配置 。此参数可以在 postgersql.conf 文件中设置,也可以在会话中使用 SET 命令设置。

目前在 PostgreSQL 数据库中有几种预定义的文本搜索配置可供选择,当然也可以自定义文本搜索配置。

psql 命令还可以显示文本搜索对象配置的和词典的信息,请参见 \dF 命令的使用

2 环境准备

2.1 创建一个自定义的文本搜索配置

  1. 这里使用内置的 english 预定义配置为模版,创建新的搜索配置 pg
CREATE TEXT SEARCH CONFIGURATION public.pg (COPY = pg_catalog.english);
  1. 查看自定义配置。
\dF public.pg;

2.2 创建一个同义词词典典

  1. 编辑 $SHAREDIR/tsearch_data/pg_dict.syn
vi $PGHOME/share/tsearch_data/pg_dict.syn
postgres    pg
pgsql       pg
postgresql  pg
  1. 创建同义词词典。
CREATE TEXT SEARCH DICTIONARY pg_dict (
    TEMPLATE = synonym,
    SYNONYMS = pg_dict
);

2.3 创建Ipspell 词典

CREATE TEXT SEARCH DICTIONARY english_ispell (
    TEMPLATE = ispell,
    DictFile = english,
    AffFile = english,
    StopWords = english
);