Парсеры текстового поиска отвечают за разбиение исходного текста документа на токены и определение типа каждого токена, при этом набор возможных типов определяется самим парсером. Обратите внимание, что парсер никак не изменяет исходный текст — он лишь определяет вероятные границы слов. В силу ограниченности данной задачи потребность в специализированных парсерах для конкретных приложений возникает значительно реже, чем в пользовательских словарях. В настоящее время Digital Q.DataBase предоставляется лишь один встроенный парсер, который зарекомендовал себя как эффективное решение для широкого спектра приложений.
Встроенный парсер имеет имя pg_catalog.default.
Он распознает 23 типа токенов, перечисленных в Таблица 2.9.1.
Таблица 2.9.1. Типы токенов встроенного парсера
Используемое парсером определение термина «буква» определяется настройками локали базы данных, а именно параметром lc_ctype. Слова, содержащие только базовые символы ASCII, классифицируются как отдельный тип токена, поскольку в некоторых случаях их целесообразно обрабатывать обособленно. В большинстве европейских
языков данные типы токенов word и asciiword
следует интерпретировать идентично.
email не поддерживает все допустимые символы адресов электронной почты, определенные в стандарте RFC 5322. В частности, единственными неалфавитно-цифровыми символами, поддерживаемыми в именах пользователей электронной почты, являются точка, дефис и символ подчеркивания.
Парсер может формировать перекрывающиеся токены на основе одного и того же фрагмента текста. Например, слово, написанное через дефис, будет возвращено как в виде единого слова, так и в виде каждого из его составляющих компонентов:
SELECT alias, description, token FROM ts_debug('foo-bar-beta1');
alias | описание | токен
-----------------+------------------------------------------+---------------
numhword | Составное слово с дефисом, буквы и цифры | foo-bar-beta1
hword_asciipart | Часть составного слова, все символы ASCII | foo
blank | Пробельные символы | -
hword_asciipart | Часть слова через дефис, все символы ASCII | bar
blank | Пробельные символы | -
hword_numpart | Часть слова через дефис, буквы и цифры | beta1
Данное поведение является предпочтительным, поскольку оно позволяет выполнять поиск как по составному слову целиком, так и по его отдельным компонентам. Ниже приведен еще один наглядный пример:
SELECT alias, description, token FROM ts_debug('http://example.com/stuff/index.html');
alias | description | токен
----------+---------------+------------------------------
protocol | Протокол | http://
url | URL | example.com/stuff/index.html
host | Хост | example.com
url_path | Путь URL | /stuff/index.html