×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

2.9.8. Тестирование и отладка текстового поиска

2.9.8.1. Тестирование конфигурации
2.9.8.2. Тестирование парсера
2.9.8.3. Тестирование словарей

Поведение пользовательской конфигурации текстового поиска может со временем стать неочевидным. Функции, описанные в данном разделе, полезны для тестирования объектов текстового поиска. Вы можете протестировать конфигурацию целиком либо проверить работу парсеров и словарей по отдельности.

2.9.8.1. Тестирование конфигурации #

Функция ts_debug позволяет упростить процесс тестирования конфигурации текстового поиска.

ts_debug([ config regconfig, ] документ текстовые,
         OUT alias текстовые,
         OUT description текстовые,
         OUT токен текстовые,
         OUT словари regdictionary[],
         OUT словарь regdictionary,
         OUT лексемы text[])
         возвращает набор записей типа record

ts_debug отображает информацию о каждом токене документ , полученном парсером и обработанном настроенными словарями. При этом используется конфигурация, заданная в config, или default_text_search_config если данный аргумент не указан.

ts_debug возвращает по одной строке для каждого токена, идентифицированного в исходном тексте парсером. Функция возвращает следующие столбцы:

  • alias текстовые — краткое наименование типа токена

  • description текстовые — описание типа токена

  • токен текстовые — текстовое содержимое токена

  • словари regdictionary[] — the словари, выбранные в конфигурации для данного типа токена

  • словарь regdictionary — словарь , распознавший токен, или NULL если ни один словарь не обработал токен

  • лексемы text[] — лексемы, сформированные словарем, который распознал токен, или NULL если ни один из них не подошел; пустой массив ({}) означает, что токен был распознан как стоп-слово

Ниже приведен простой пример:

SELECT * FROM ts_debug('english', 'a fat  cat sat on a mat - it ate a fat rats');
   alias   |   description   | токен |  словари  |  словарь  | лексемы
-----------+-----------------+-------+----------------+--------------+---------
 asciiword | Слово, все символы ASCII | a     | {english_stem} | english_stem | {}
 blank     | Пробельные символы   |       | {}             |              |
 asciiword | Слово, все символы ASCII | fat   | {english_stem} | english_stem | {fat}
 blank     | Пробельные символы   |       | {}             |              |
 asciiword | Слово, все символы ASCII | cat   | {english_stem} | english_stem | {cat}
 blank     | Пробельные символы   |       | {}             |              |
 asciiword | Слово, все символы ASCII | sat   | {english_stem} | english_stem | {sat}
 blank     | Пробельные символы   |       | {}             |              |
 asciiword | Слово, все символы ASCII | on    | {english_stem} | english_stem | {}
 blank     | Пробельные символы   |       | {}             |              |
 asciiword | Слово, все символы ASCII | a     | {english_stem} | english_stem | {}
 blank     | Пробельные символы   |       | {}             |              |
 asciiword | Слово, все символы ASCII | mat   | {english_stem} | english_stem | {mat}
 blank     | Пробельные символы   |       | {}             |              |
 blank     | Пробельные символы   | -     | {}             |              |
 asciiword | Слово, все символы ASCII | it    | {english_stem} | english_stem | {}
 blank     | Пробельные символы   |       | {}             |              |
 asciiword | Слово, все символы ASCII | ate   | {english_stem} | english_stem | {ate}
 blank     | Пробельные символы   |       | {}             |              |
 asciiword | Слово, все символы ASCII | a     | {english_stem} | english_stem | {}
 blank     | Пробельные символы   |       | {}             |              |
 asciiword | Слово, все символы ASCII | fat   | {english_stem} | english_stem | {fat}
 blank     | Пробельные символы   |       | {}             |              |
 asciiword | Слово, все символы ASCII | rats  | {english_stem} | english_stem | {rat}

Для более подробной демонстрации сначала создадим public.english конфигурацию текстового поиска и словарь Ispell для английского языка:

CREATE TEXT SEARCH CONFIGURATION public.english ( COPY = pg_catalog.english );

CREATE TEXT SEARCH DICTIONARY english_ispell (
    TEMPLATE = ispell,
    DictFile = english,
    AffFile = english,
    StopWords = english
);

ALTER TEXT SEARCH CONFIGURATION public.english
   ALTER MAPPING FOR asciiword WITH english_ispell, english_stem;
SELECT * FROM ts_debug('public.english', 'The Brightest supernovaes');
   псевдоним   |   описание   |    токен    |         словари          |   словарь   |   лексемы
-----------+-----------------+-------------+-------------------------------+----------------+-------------
 asciiword | Слово, все символы ASCII | The         | {english_ispell,english_stem} | english_ispell | {}
 blank     | Пробельные символы   |             | {}                            |                |
 asciiword | Word, all ASCII | Brightest   | {english_ispell,english_stem} | english_ispell | {bright}
 blank     | Пробельные символы   |             | {}                            |                |
 asciiword | Word, all ASCII | supernovaes | {english_ispell,english_stem} | english_stem   | {supernova}

В данном примере слово Brightest было распознано парсером как ASCII-слово (псевдоним asciiword). Для данного типа токена определен следующий список словарей: english_ispell и english_stem. Слово было успешно обработано словарем english_ispell, который нормализовал его до существительного bright. Слово supernovaes является неизвестным для english_ispell словаря, поэтому оно было передано следующему словарю и успешно распознано (по сути, english_stem представляет собой словарь Snowball, который обрабатывает любые токены; именно поэтому он был помещен в конец списка словарей).

Слово The было распознано english_ispell словарём как стоп-слово (Раздел 2.9.6.1) и не будет проиндексировано. Пробелы также отбрасываются, поскольку в данной конфигурации для них не определены словари.

Ширину вывода можно уменьшить, явно указав необходимые столбцы:

SELECT alias, token, dictionary, lexemes
FROM ts_debug('public.english', 'The Brightest supernovaes');
   alias   |    token    |   dictionary   |   lexemes
-----------+-------------+----------------+-------------
 asciiword | The         | english_ispell | {}
 blank     |             |                |
 asciiword | Brightest   | english_ispell | {bright}
 blank     |             |                |
 asciiword | supernovaes | english_stem   | {supernova}

2.9.8.2. Тестирование парсера #

Следующие функции позволяют выполнять прямое тестирование парсера текстового поиска.

ts_parse(parser_name текстовые, документ текстовые,
         OUT tokid integer, OUT токен текстовые) возвращает setof record
ts_parse(parser_oid oid, документ текстовые,
         OUT tokid integer, OUT токен текстовые) возвращает setof record

ts_parse выполняет парсинг заданной документ и возвращает набор записей, по одной для каждого токена, полученного в процессе парсинга. Каждая запись включает поле tokid отображающая назначенный тип токена и токен представляющий собой исходный текст токена. Например:

SELECT * FROM ts_parse('default', '123 - a number');
 tokid | token
-------+--------
    22 | 123
    12 |
    12 | -
     1 | a
    12 |
     1 | number

ts_token_type(parser_name текстовые, OUT tokid integer,
              OUT alias текстовые, OUT description текстовые) возвращает setof record
ts_token_type(parser_oid oid, OUT tokid integer,
              OUT alias текстовые, OUT description текстовые) возвращает setof record

ts_token_type возвращает таблицу, которая описывает каждый тип токена, распознаваемый указанным парсером. Для каждого типа токена в таблице приводится целочисленный идентификатор tokid используемый парсером для маркировки токена данного типа, alias определяющий имя типа токена в командах настройки, а также краткое description. Например:

SELECT * FROM ts_token_type('default');
 tokid |      alias      |               описание
-------+-----------------+------------------------------------------
     1 | asciiword       | Слово, все символы ASCII
     2 | word            | Слово, состоящее только из букв
     3 | numword         | Слово, состоящее из букв и цифр
     4 | email           | Адрес электронной почты
     5 | url             | URL-адрес
     6 | host            | Имя узла (хост)
     7 | sfloat          | Число в научной нотации
     8 | version         | Номер версии
     9 | hword_numpart   | Часть составного слова (через дефис), буквы и цифры
    10 | hword_part      | Часть составного слова (через дефис), только буквы
    11 | hword_asciipart | Часть составного слова (через дефис), все символы ASCII
    12 | blank           | Пробельные символы
    13 | tag             | XML-тег
    14 | protocol        | Заголовок протокола
    15 | numhword        | Составное слово (через дефис), буквы и цифры
    16 | asciihword      | Составное слово (через дефис), все символы ASCII
    17 | hword           | Составное слово (через дефис), только буквы
    18 | url_path        | Путь URL
    19 | файл            | Имя файла или пути
    20 | число с плавающей точкой           | Десятичная форма записи
    21 | целое число             | Целое число со знаком
    22 | безнаковое целое число            | Беззнаковое целое число
    23 | сущность          | XML-сущность

2.9.8.3. Тестирование словарей #

Оператор ts_lexize Данная функция упрощает процесс тестирования словарей.

ts_lexize(словарь regdictionary, токен текстовые) возвращает text[]

ts_lexize возвращает массив лексем, если входное значение токен известно словарю, или пустой массив, если токен известен словарю, но является стоп-словом, либо NULL если слово не распознано.

Примеры:

SELECT ts_lexize('english_stem', 'stars');
 ts_lexize
-----------
 {star}

SELECT ts_lexize('english_stem', 'a');
 ts_lexize
-----------
 {}

Примечание

Семейство ts_lexize функция ожидает одиночный токен токен, а не текстовую строку. Ниже приведен пример ситуации, которая может вызвать затруднение:

SELECT ts_lexize('thesaurus_astro', 'supernovae stars') is null;
 ?column?
----------
 t

Словарь-тезаурус thesaurus_astro распознает данную фразу сверхновые звезды, однако ts_lexize вызов завершается неудачей, поскольку функция не выполняет парсинг входного текста, а обрабатывает его как единый токен. Используйте plainto_tsquery или to_tsvector для тестирования словарей-тезаурусов, например:

SELECT plainto_tsquery('supernovae stars');
 plainto_tsquery
-----------------
 'sn'

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению