🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 12.7\. 配置实例 文本搜索配置指定所有选项将文档转换成一个`tsvector`:使用解析器将文本分解为标记, 并且使用词典将每个标记转换为词。`to_tsvector`或者`to_tsquery`的每一次调用需要一个文本搜索配置来执行处理。 如果一个明确的配置参数被省略,则配置参数[default_text_search_config](#calibre_link-1138)指定默认配置的名称, 它是通过一个文本搜索函数使用的。它可以在`postgresql.conf`中设置,或使用`SET`命令设置一个独立会话。 有几个预定义的文本搜索配置是可用的,并且您可以很容易的创建自定义的配置。 为了方便文本搜索对象的管理,一组SQL命令是可用的, 有几个psql命令可以显示有关文本搜索对象的信息(节[Section 12.10](#calibre_link-1130))。 作为一个例子,我们将创建一个配置`pg`,通过复制内置`english`配置启动: ``` CREATE TEXT SEARCH CONFIGURATION public.pg ( COPY = pg_catalog.english ); ``` 我们将使用PostgreSQL特定的同义词列表并将其存储在`$SHAREDIR/tsearch_data/pg_dict.syn`中。 文件内容看起来像: ``` postgres pg pgsql pg postgresql pg ``` 我们定义这样的同义词词典: ``` CREATE TEXT SEARCH DICTIONARY pg_dict ( TEMPLATE = synonym, SYNONYMS = pg_dict ); ``` 接下来我们注册Ispell词典`english_ispell`,它有自己的配置文件: ``` CREATE TEXT SEARCH DICTIONARY english_ispell ( TEMPLATE = ispell, DictFile = english, AffFile = english, StopWords = english ); ``` 现在我们可以在配置`pg`中建立词汇映射: ``` ALTER TEXT SEARCH CONFIGURATION pg ALTER MAPPING FOR asciiword, asciihword, hword_asciipart, word, hword, hword_part WITH pg_dict, english_ispell, english_stem; ``` 我们没有选择索引或搜索一些内置配置处理的标记类型: ``` ALTER TEXT SEARCH CONFIGURATION pg DROP MAPPING FOR email, url, url_path, sfloat, float; ``` 现在我们测试我们的配置: ``` SELECT * FROM ts_debug('public.pg', ' PostgreSQL, the highly scalable, SQL compliant, open source object-relational database management system, is now undergoing beta testing of the next version of our software. '); ``` 下一步是使用新的配置设置会话,这是在`public`模式中建立的: ``` => \dF List of text search configurations Schema | Name | Description ---------+------+------------- public | pg | SET default_text_search_config = 'public.pg'; SET SHOW default_text_search_config; default_text_search_config ---------------------------- public.pg ```