E.40. test_parser

Модуль test_parser представляет пример нестандартного разбора текста для полнотекстового поиска. Он не делает ничего особенно полезного, но может послужить отправной точкой для разработки собственной процедуры разбора.

Анализатор текста test_parser распознаёт слова, разделённые пробельными символами, и возвращает только два типа фрагментов:

mydb=# SELECT * FROM ts_token_type('testparser');
 tokid | alias |  description
-------+-------+---------------
     3 | word  | Word
    12 | blank | Space symbols
(2 rows)

Такие номера фрагментов выбраны для совместимости с нумерацией стандартного анализатора. Это позволяет использовать его функцию headline() ради простоты примера.

E.40.1. Usage

При установке расширения test_parser в базе создаётся анализатор текстового поиска testparser. Он не имеет параметров, настраиваемых пользователем.

Вы можете протестировать этот анализатор, например, так:

mydb=# SELECT * FROM ts_parse('testparser', 'That''s my first own parser');
 tokid | token
-------+--------
     3 | That's
    12 |
     3 | my
    12 |
     3 | first
    12 |
     3 | own
    12 |
     3 | parser

Для применения на практике нужно создать конфигурацию текстового поиска, которая будет использовать этот анализатор. Например:

mydb=# CREATE TEXT SEARCH CONFIGURATION testcfg ( PARSER = testparser );
CREATE TEXT SEARCH CONFIGURATION

mydb=# ALTER TEXT SEARCH CONFIGURATION testcfg
mydb-#   ADD MAPPING FOR word WITH english_stem;
ALTER TEXT SEARCH CONFIGURATION

mydb=#  SELECT to_tsvector('testcfg', 'That''s my first own parser');
          to_tsvector
-------------------------------
 'that':1 'first':3 'parser':5
(1 row)

mydb=# SELECT ts_headline('testcfg', 'Supernovae stars are the brightest phenomena in galaxies',
mydb(#                    to_tsquery('testcfg', 'star'));
                           ts_headline
-----------------------------------------------------------------
 Supernovae <b>stars</b> are the brightest phenomena in galaxies
(1 row)