| Документация по PostgreSQL 9.4.1 | |||
|---|---|---|---|
| Пред. | Уровень выше | Глава 12. Полнотекстовый поиск | След. |
12.5. Анализаторы
Задача анализаторов текста — разделить текст документа на фрагменты и присвоить каждому из них тип из набора, определённого в самом анализаторе. Заметьте, что анализаторы не меняют текст — они просто выдают позиции предполагаемых слов. Вследствие такой ограниченности их функций, собственные специфические анализаторы бывают нужны гораздо реже, чем собственные словари. В настоящее время в PostgreSQL есть только один встроенный анализатор, который может быть полезен для широкого круга приложений.
Этот встроенный анализатор называется pg_catalog.default. Он распознаёт 23 типа фрагментов, перечисленные в Таблице 12-1.
Таблица 12-1. Типы фрагментов, выделяемых стандартным анализатором
| Псевдоним | Описание | Пример |
|---|---|---|
| asciiword | Слово только из букв ASCII | elephant |
| word | Слово из любых букв | mañana |
| numword | Слово из букв и цифр | beta1 |
| asciihword | Слово только из букв ASCII с дефисами | up-to-date |
| hword | Слово из любых букв с дефисами | lógico-matemática |
| numhword | Слово из букв и цифр с дефисами | postgresql-beta1 |
| hword_asciipart | Часть слова с дефисами, только из букв ASCII | postgresql в словосочетании postgresql-beta1 |
| hword_part | Часть слова с дефисами, из любых букв | lógico или matemática в словосочетании lógico-matemática |
| hword_numpart | Часть слова с дефисами, из букв и цифр | beta1 в словосочетании postgresql-beta1 |
| Адрес электронной почты | foo@example.com | |
| protocol | Префикс протокола | http:// |
| url | URL | example.com/stuff/index.html |
| host | Имя узла | example.com |
| url_path | Путь в адресе URL | /stuff/index.html, как часть URL |
| file | Путь или имя файла | /usr/local/foo.txt, если не является частью URL |
| sfloat | Научная запись числа | -1.234e56 |
| float | Десятичная запись числа | -1.234 |
| int | Целое со знаком | -1234 |
| uint | Целое без знака | 1234 |
| version | Номер версии | 8.3.0 |
| tag | Тег XML | <a href="dictionaries.html"> |
| entity | Сущность XML | & |
| blank | Символы-разделители | (любые пробельные символы или знаки препинания, не попавшие в другие категории) |
Замечание: Понятие "буквы" анализатор определяет исходя из локали, заданной для базы данных, в частности параметра lc_ctype. Слова, содержащие только буквы из ASCII (латинские буквы), распознаются как фрагменты отдельного типа, так как иногда бывает полезно выделить их. Для многих европейских языков типы фрагментов word и asciiword можно воспринимать как синонимы.
email принимает не все символы, которые считаются допустимыми по стандарту RFC 5322. В частности, имя почтового ящика помимо алфавитно-цифровых символов может содержать только точку, минус и подчёркивание.
Анализатор может выделить в одном тексте несколько перекрывающихся фрагментов. Например, слово с дефисом будет выдано как целое составное слово и по частям:
SELECT alias, description, token FROM ts_debug('foo-bar-beta1');
alias | description | token
-----------------+------------------------------------------+--------------
numhword | Hyphenated word, letters and digits | foo-bar-beta1
hword_asciipart | Hyphenated word part, all ASCII | foo
blank | Space symbols | -
hword_asciipart | Hyphenated word part, all ASCII | bar
blank | Space symbols | -
hword_numpart | Hyphenated word part, letters and digits | beta1Это поведение считается желательным, так как это позволяет находить при последующем поиске и всё слово целиком, и его части. Ещё один показательный пример:
SELECT alias, description, token
FROM ts_debug('http://example.com/stuff/index.html');
alias | description | token
----------+---------------+------------------------------
protocol | Protocol head | http://
url | URL | example.com/stuff/index.html
host | Host | example.com
url_path | URL path | /stuff/index.html| Пред. | Начало | След. |
| Дополнительные возможности | Уровень выше | Словари |