12.7. Пример конфигурации#

12.7. Пример конфигурации

12.7. Пример конфигурации #

Конфигурация полнотекстового поиска определяет все параметры, необходимые для преобразования документа в тип tsvector: парсер, используемый для разбиения текста на компоненты, и словари, используемые для преобразования каждого компонента в лексему. Каждый вызов функции to_tsvector или to_tsquery требует наличия конфигурации полнотекстового поиска для выполнения своей обработки. Параметр конфигурации default_text_search_config определяет имя конфигурации по умолчанию, которая используется функциями полнотекстового поиска, если явно не указан параметр конфигурации. Его можно установить в файле postgresql.conf или установить для отдельной сессии с помощью команды SET.

Существует несколько предопределенных конфигураций полнотекстового поиска, и вы можете легко создавать пользовательские конфигурации. Для упрощения управления объектами полнотекстового поиска доступен набор команд SQL, а также несколько команд psql, которые отображают информацию о объектах полнотекстового поиска (Раздел 12.10).

В качестве примера мы создадим конфигурацию 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