Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Managed Service for PostgreSQL
  • Начало работы
    • Все инструкции
      • Управление расширениями
      • pg_cron
      • pg_repack
      • pgaudit
      • pgcrypto
      • postgresql_anonymizer
      • Словари от Hunspell для полнотекстового поиска
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Публичные материалы
  • История изменений
  • Обучающие курсы

В этой статье:

  • Добавить словарь
  • Примеры
  • Добавить русский словарь
  • Добавить английский словарь
  1. Пошаговые инструкции
  2. Расширения и словари PostgreSQL
  3. Словари от Hunspell для полнотекстового поиска

Словари от Hunspell для полнотекстового поиска

Статья создана
Yandex Cloud
Обновлена 24 апреля 2024 г.
  • Добавить словарь
  • Примеры
    • Добавить русский словарь
    • Добавить английский словарь

Словари используются для настройки полнотекстового поиска в документах, хранящихся в PostgreSQL. В кластерах Managed Service for PostgreSQL предустановлены словари от корректора орфографии Hunspell с поддержкой нескольких языков.

Ниже в качестве примеров приводятся инструкции по добавлению русского и английского словаря.

Добавить словарьДобавить словарь

  1. Подключитесь к базе данных с помощью утилиты psql.

  2. Чтобы узнать, какие языки доступны, получите список предустановленных конфигураций для полнотекстового поиска:

    SELECT cfgname FROM pg_catalog.pg_ts_config;
    

    Результат содержит названия конфигураций, представленные в виде названий языков.

  3. Создайте конфигурацию public.my_config для полнотекстового поиска:

    CREATE TEXT SEARCH CONFIGURATION public.my_config ( COPY = pg_catalog.<конфигурация> );
    

    В SQL-запросе укажите конфигурацию с нужным языком, полученную на предыдущем шаге.

  4. Создайте словарь my_dictionary в БД:

    CREATE TEXT SEARCH DICTIONARY my_dictionary (
       TEMPLATE = ispell,
       DictFile = <набор_слов_в_словаре>,
       AffFile = <набор_аффиксов>,
       Stopwords = <стоп-слова>
    );
    

    Параметры SQL-запроса:

    • TEMPLATE — шаблон, по которому создается словарь. Подробнее о словарях Ispell.
    • DictFile — предустановленный файл с набором слов в виде словаря.
    • AffFile — предустановленный файл с набором аффиксов (приставок, суффиксов и окончаний), которые можно добавить к словам в словаре.
    • Stopwords — стоп-слова, которые не нужно учитывать при полнотекстовом поиске. К таким словам могут относиться, например, предлоги или междометия.

    Файлы со словарями и аффиксами, предустановленные в кластерах Managed Service for PostgreSQL:

    Язык Словарь DictFile Аффиксы AffFile
    Английский en_gb.dict en_GB.affix
    Датский da_dk.dict da_DK.affix
    Испанский es_es.dict es_ES.affix
    Итальянский it_it.dict it_IT.affix
    Немецкий de_de_frami.dict de_de_frami.affix
    Польский pl_pl.dict pl_PL.affix
    Русский ru_ru.dict ru_RU.affix
    Украинский uk_ua.dict uk_UA.affix
    Чешский cs_cz.dict cs_CZ.affix

    Также доступны примеры словарей от PostgreSQL:

    Словарь DictFile Аффиксы AffFile
    hunspell_sample_long.dict hunspell_sample_long.affix
    hunspell_sample_num.dict hunspell_sample_num.affix
    ispell_sample.dict ispell_sample.affix

    В SQL-запросе CREATE TEXT SEARCH DICTIONARY названия файлов указываются без расширений .dict и .affix.

  5. Свяжите словарь my_dictionary и другие словари с типом токенов word.

    Токен — искомое слово или фраза. Задается в поисковом запросе и отображается в результатах полнотекстового поиска.

    ALTER TEXT SEARCH CONFIGURATION public.my_config
       ALTER MAPPING FOR word
       WITH my_dictionary,<список_словарей>;
    

    В строке WITH укажите общедоступные словари с более широким набором слов, например english_ispell или english_stem. Чем шире словарь, тем позднее он должен быть указан в строке WITH.

  6. Сделайте public.my_config конфигурацией по умолчанию:

    SET default_text_search_config = 'public.my_config';
    
  7. Проверьте, что конфигурация по умолчанию — это public.my_config:

    SHOW default_text_search_config;
    

    Результат:

     default_text_search_config
    ----------------------------
     public.my_config
    (1 row)
    
  8. Убедитесь, что полнотекстовый поиск выполняется:

    SELECT * FROM ts_debug('<токен>');
    

    В качестве токена укажите слово, которое можно найти в документах в БД.

    Результат:

     alias |    description    |  token  |       dictionaries       |           dictionary           +   lexemes
    -------+-------------------+---------+--------------------------+--------------------------------+------------
     word  | Word, all letters | <токен> | {<используемые_словари>} | <словарь_с_найденной_лексемой> | {<лексемы>}
    (1 row)
    

    Здесь лексема — слово, которое заменяет однокоренные слова при полнотекстовом поиске. Например, если в документе в БД встречаются слова облачный, облаками и облаку, PostgreSQL может распознать их как одно слово — лексему облако.

ПримерыПримеры

Добавить русский словарьДобавить русский словарь

  1. Подключитесь к базе данных с помощью утилиты psql.

  2. Создайте конфигурацию public.my_russian_config для полнотекстового поиска:

    CREATE TEXT SEARCH CONFIGURATION public.my_russian_config ( COPY = pg_catalog.russian );
    
  3. Создайте словарь в БД:

    CREATE TEXT SEARCH DICTIONARY russian_hunspell (
       TEMPLATE = ispell,
       DictFile = ru_ru,
       AffFile = ru_RU,
       Stopwords = russian
    );
    
  4. Свяжите словари russian_hunspell и russian_stem с типом токенов word:

    ALTER TEXT SEARCH CONFIGURATION public.my_russian_config
       ALTER MAPPING FOR word
       WITH russian_hunspell, russian_stem;
    
  5. Сделайте public.my_russian_config конфигурацией по умолчанию:

    SET default_text_search_config = 'public.my_russian_config';
    
  6. Проверьте, что конфигурация по умолчанию — это public.my_russian_config:

    SHOW default_text_search_config;
    

    Результат:

     default_text_search_config
    ----------------------------
     public.my_russian_config
    (1 row)
    
  7. Убедитесь, что полнотекстовый поиск выполняется:

    SELECT * FROM ts_debug('<токен>');
    

    В качестве токена укажите слово, которое можно найти в документах в БД.

    Результат:

     alias |    description    |  token  |          dictionaries           |    dictionary    +   lexemes
    -------+-------------------+---------+---------------------------------+------------------+------------
     word  | Word, all letters | <токен> | {russian_hunspell,russian_stem} | russian_hunspell | {<лексемы>}
    (1 row)
    

Добавить английский словарьДобавить английский словарь

  1. Подключитесь к базе данных с помощью утилиты psql.

  2. Создайте конфигурацию public.my_english_config для полнотекстового поиска:

    CREATE TEXT SEARCH CONFIGURATION public.my_english_config ( COPY = pg_catalog.english );
    
  3. Создайте словарь в БД:

    CREATE TEXT SEARCH DICTIONARY english_hunspell (
       TEMPLATE = ispell,
       DictFile = en_gb,
       AffFile = en_GB,
       Stopwords = english
    );
    
  4. Свяжите словари english_hunspell и english_stem с типом токенов word:

    ALTER TEXT SEARCH CONFIGURATION public.my_english_config
       ALTER MAPPING FOR word
       WITH english_hunspell, english_stem;
    
  5. Сделайте public.my_english_config конфигурацией по умолчанию:

    SET default_text_search_config = 'public.my_english_config';
    
  6. Проверьте, что конфигурация по умолчанию — это public.my_english_config:

    SHOW default_text_search_config;
    

    Результат:

     default_text_search_config
    ----------------------------
     public.my_english_config
    (1 row)
    
  7. Убедитесь, что полнотекстовый поиск выполняется:

    SELECT * FROM ts_debug('<токен>');
    

    В качестве токена укажите слово, которое можно найти в документах в БД.

    Результат:

     alias |    description    |  token  |          dictionaries           |    dictionary    +   lexemes
    -------+-------------------+---------+---------------------------------+------------------+------------
     word  | Word, all letters | <токен> | {english_hunspell,english_stem} | english_hunspell | {<лексемы>}
    (1 row)
    

Была ли статья полезна?

Предыдущая
postgresql_anonymizer
Следующая
Просмотр логов кластера
Проект Яндекса
© 2025 ООО «Яндекс.Облако»