Postgres - статьи


SQL команды


CREATE FULLTEXT CONFIGURATION - создание полнотекстовой конфигурации

CREATE FULLTEXT CONFIGURATION cfgname PARSER prsname [ LOCALE localename] [AS DEFAULT];

CREATE FULLTEXT CONFIGURATION cfgname [{ PARSER prsname | LOCALE localename } [ ...]] LIKE template_cfg [WITH MAP] [AS DEFAULT];

  • FTS конфигурация принадлежит пользователю, который создал ее
  • Имя конфигурации cfgname может содержать название схемы, тогда она будет создана в этой схеме, иначе конфигурация будет создана в текущей схеме.
  • PARSER prsname задает парсер, который который используется для разбивания текста на токены. Имя парсера также может содержать название схемы.
  • LOCALE localename - задает название серверной локале, для которой эта конфигурация будет выбираться по умолчанию, если задана опция AS DEFAULT.

  • LIKE template_cfg указывает, что в качестве шаблона используется существующая FTS конфигурация template_cfg.
  • WITH MAP используется с LIKE template_cfg и означает, что также копируются правила обработки токенов словарями.
  • Примеры:

    =# CREATE FULLTEXT CONFIGURATION test LIKE pg_catalog.russian_utf8 AS DEFAULT; =# \dF public.test List of fulltext configurations Schema | Name | Locale | Default | Description --------+------+-------------+---------+------------- public | test | ru_RU.UTF-8 | Y |

    DROP FULLTEXT CONFIGURATION - удалить FTS конфигурацию

    DROP FULLTEXT CONFIGURATION [IF EXISTS]cfgname [ CASCADE | RESTRICT ];



  • IF EXISTS указывать не выдавать ошибку, если удаляемая конфигурация не существует.
  • CASCADE - автоматически удалить все FTS объекты, зависящие от удаляемой FTS конфигурации.
  • RESTRICT - не удалять FTS конфигурацию, если есть какие-либо FTS объекты, зависящие от нее. Этот режим используется по умолчанию.
  • ALTER FULLTEXT CONFIGURATION - изменить FTS конфигурацию

    ALTER FULLTEXT CONFIGURATION cfgname RENAME TO newcfgname;

    ALTER FULLTEXT CONFIGURATION cfgname SET { LOCALE localename | PARSER prsname } [, ...];

    ALTER FULLTEXT CONFIGURATION cfgname { SET AS | DROP } DEFAULT;

    Эта команда позволяет изменить параметры, задаваемые при ее создании.


    CREATE FULLTEXT DICTIONARY - создать словарь

    CREATE FULLTEXT DICTIONARY dictname LEXIZE lexize_function [INIT init_function ] [OPTION opt_text ] ;

    CREATE FULLTEXT DICTIONARY dictname [ { INIT init_function | LEXIZE lexize_function | OPTION opt_text } [ ... ]] LIKE template_dictname;

  • Название словаря dictname может содержать название схемы, в которой он будет создан, например, public.english.


  • LEXIZE lexize_function - название функции, которая занимается преобразованием токена в лексему.


  • INIT init_function - название функции, которая инициализирует словарь


  • OPTION opt_text - задает текстовую строку, которая доступна словарю. Обычно, ее используют для указания файлов, используемых словарем. Относительные пути для словарных файлов интерпретируются относительно директории $PGROOT/share/dicts_data.


  • LIKE template_dictname - задает словарь-шаблон, используемый для создания словаря. При этом, значения параметров INIT, LEXIZE, OPTION, если заданы, перекрывают значения по умолчанию.


  • Для примера, создадим словарь my_simple, который будет аналогичен встроенному словарю simple, но способен различать стоп-слова английского языка.

    =# CREATE FULLTEXT DICTIONARY public.my_simple OPTION 'english.stop' LIKE pg_catalog.simple; =# select lexize('public.my_simple','YeS'); lexize -------- {yes} =# select lexize('public.my_simple','The'); lexize -------- {}

    Пример создания нового словаря можно посмотреть в .

    DROP FULLTEXT DICTIONARY - удаляет словарь

    DROP FULLTEXT DICTIONARY [IF EXISTS]dictname [ CASCADE | RESTRICT ];

    ALTER FULLTEXT DICTIONARY - изменяет параметры словаря

    ALTER FULLTEXT DICTIONARY dictname RENAME TO newdictname;

    ALTER FULLTEXT DICTIONARY dictname SET OPTION opt_text;

    CREATE FULLTEXT MAPPING - создать правила обработки токенов словарями

    CREATE FULLTEXT MAPPING ON cfgname FOR tokentypename[, ...] WITH dictname1[, ...];

    Для FTS конфигурации cfgname задается соответствие между списком tokentypename1,tokentypename2,...

    и словарями, через которые эти токены этих типов будут проходить.




    • tokentypename[, ...] - список типов токенов, например, lword,lhword,lpart_hword.


    • dictname1[, ...] - список словарей, которые будут пытаться опознать токены. Порядок словарей важен.


    • Например, создадим тестовую конфигурацию testcfg на основе шаблона russian_utf8 и зададим правила обработки английских слов lhword,lpart_hword,lword.

      =# CREATE FULLTEXT CONFIGURATION testcfg LOCALE 'testlocale' LIKE russian_utf8; =# CREATE FULLTEXT MAPPING ON testcfg FOR lword,lhword,lpart_hword WITH simple,en_stem; =# \dF+ testcfg Configuration 'testcfg' Parser name: 'default' Locale: 'testlocale' Token | Dictionaries -------------+---------------- lhword | simple,en_stem lpart_hword | simple,en_stem lword | simple,en_stem

      ALTER FULLTEXT MAPPING - изменить правило обработки токенов

      ALTER FULLTEXT MAPPING ON cfgname FOR tokentypename[, ...] WITH dictname1[, ...];

      ALTER FULLTEXT MAPPING ON cfgname [FOR tokentypename[, ...] ] REPLACE olddictname TO newdictname;

      Позволяет добавлять новые правила обработки токенов или изменять старые. Изменим правило для токена типа lword, см. предыдущий пример.

      =# ALTER FULLTEXT MAPPING ON testcfg FOR lhword WITH simple; =# \dF+ testcfg Configuration 'testcfg' Parser name: 'default' Locale: 'testlocale' Token | Dictionaries --------+---------------- lhword | simple,en_stem lpart_hword | simple,en_stem lword | simple

      DROP FULLTEXT MAPPING - удалить правило обработки токена

      DROP FULLTEXT MAPPING [IF EXISTS] ON cfgname FOR tokentypename;

      CREATE FULLTEXT PARSER - создать FTS парсер

      CREATE FULLTEXT PARSER prsname START= start_function GETTOKEN gettoken_function END end_function LEXTYPES lextypes_function [ HEADLINE headline_function ] ;

    • prsname - имя создаваемого парсера, может содержать название схемы, в которой он будет создан.


    • start_function - название функции, которая инициализирует парсер.


    • gettoken_function - название функции, которая возвращает токен.


    • end_function - название функции, которая вызывается после окончания работы парсера.


    • lextypes_function - название функции, которая возвращает массив, содержащий {id,alias,full descr} - идентификатор, краткое название токена и полное описание. Подробнее, смотри в src/include/utils/ts_public.h.



    • headline_function, - название функции, которая возвращает часть документа, содержащая запрос.


    • Встроенный парсер называется default и распознает 23 типа токенов, список которых можно получить с помощью функции token_type(prsname). Пример создания нового парсера можно посмотреть в

      DROP FULLTEXT PARSER - удалить FTS парсер

      DROP FULLTEXT PARSER [IF EXISTS] prsname [ CASCADE | RESTRICT ];

      ALTER FULLTEXT PARSER - изменить имя FTS парсера

      ALTER FULLTEXT PARSER prsname RENAME TO newprsname;

      ALTER FULLTEXT ... OWNER - изменить владельца

      ALTER FULLTEXT { PARSER|DICTIONARY|CONFIGURATION } name OWNER TO newowner;

      По умолчанию, владельцем FTS объекта является тот, кто создал его. Команда ALTER FULLTEXT ... OWNER позволяет менять владельца.

      COMMENT ON FULLTEXT - создать или изменить комментарий FTS объекта

      COMMENT ON FULLTEXT { CONFIGURATION | DICTIONARY | PARSER } objname IS text;

    • Комментарий виден при использовании + в команде psql, например, \dFd+ - показать расширенную информацию о словарях.


    • Для того чтобы убрать комментарий, надо задать NULL для параметра text.

      =# COMMENT ON FULLTEXT DICTIONARY intdict IS 'Dictionary for integers';


      Содержание раздела