| Документация по 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| Пред. | Начало | След. | 
| Дополнительные возможности | Уровень выше | Словари |