PostgreSQL Text Search SARCER Использование граничного анализа отделения интенсивной терапии
Первым этапом полного текстового поиска является анализ - разбивая документ и запросы тексты в отдельные токены (различные слова, числа и т. Д.). Однако есть языки, где эта задача не так тривиальна. Наиболее выдающимся примером являются восточноазиатские языки (такие как китайский, японский, корейский и многое другое), где слова обычно не разделены пробелами и пунктуацией. Другой пример - иврит; В то время как слова разделены пунктуацией, некоторые символы могут рассматриваться как знаки препинания или не в зависимости от контекста.
Парсер по умолчанию, включенный в подсистему полной текстового поиска PostgreSQL, дает довольно неудовлетворительные результаты в этих случаях. pg_icu_parser - это расширение, которое обеспечивает пользовательскую реализацию Parser Peorcer Peorker, которая использует процедуры анализа границ Word Word для извлечения токенов из исходного текста. Они реализуют алгоритмы, указанные в Приложении 29 стандарта Unicode, и могут предоставить разумные результаты во многих языках.
В настоящее время pg_icu_parser должен быть построен из исходного кода. Убедитесь, что у вас есть файлы поддержки разработки (заголовки и т. Д.) Для PostgreSQL.
Чтобы построить и установить, запустить:
$ make install
Это будет построено против и установки в установку PostgreSQL, определяемая первым экземпляром pg_config , найденного в текущем пути. Чтобы нацелиться на конкретную установку (или не в пути):
$ make install PG_CONFIG=/path/to/pg_config
Расширение также доступно в PGXN.
Чтобы загрузить расширение в базу данных, выполните следующую команду SQL в качестве пользователя с подходящими разрешениями:
CREATE EXTENSION pg_icu_parser;Это зарегистрирует пользовательский текстовый анализатор в текущей схеме. Чтобы использовать его, необходимо создать конфигурацию текстового поиска, как описано в руководстве PostgreSQL. Например:
CREATE TEXT SEARCH CONFIGURATION sample (parser = icu_parser);
ALTER TEXT SEARCH CONFIGURATION sample ADD MAPPING FOR word WITH english_stem;
ALTER TEXT SEARCH CONFIGURATION sample ADD MAPPING FOR number , ideo, kana WITH simple; Типы токенов, которые могут быть излучены анализатором, - это word , number , kana , ideo и blank - они выравниваются с тегами словного разрыва, поддерживаемых ICU. Нет никаких ограничений относительно того, какие словари можно использовать.
pg_icu_parser обнажает один параметр конфигурации:
pg_icu_parser.locale - String, необязательно. Локаль интенсивной терапии для использования с процедурами анализа границ. Если не установлено, по умолчанию к en . Как правило, нет необходимости устанавливать этот параметр, так как нет правил обнаружения границ слов, которые чувствительны к локали. Как описано выше, основной силой pg_icu_parser по сравнению с анализатором default уже встроенному в PostgreSQL, являются лучшие результаты токенизации на разных языках. Кроме того, pg_icu_parser не зависит от настройки локали базы данных или базовой операционной системы для определения того, что такое буква.
Тем не менее, есть несколько компромиссов, чтобы узнать, что может повлиять на решение, подходит ли pg_icu_parser для конкретного случая использования:
Сигсерчик по умолчанию может распознавать широкий спектр шаблонов в качестве токенов, включая URL-адреса, адреса электронной почты, различные различные виды численных значений и т. Д. pg_icu_parser с другой стороны, имеют значительно меньше типов токенов (и те немногие, которые поддерживаются, гораздо более грубые) и не могут определить какие-либо сложные шаблоны.
На данный момент pg_icu_parser не поддерживает функцию ts_headline . Может быть, в будущем ...
pg_icu_parser намного медленнее, чем анализатор default . Однако, если кодирование сервера базы данных является UTF-8, используется быстрый путь, который уменьшает накладные расходы. Смотрите эталонный раздел ниже.
В качестве стороннего расширения pg_icu_parser можно использовать только в том случае, где доступно полное управление установкой PostGRESQL; То есть это, вероятно, нельзя использовать с управляемыми решениями PostgreSQL.
Следующий ненаучный эталон может дать представление о том, сколько замедления можно ожидать от использования pg_icu_parser вместо анализатора по умолчанию. Протестированный сценарий является запросом, чтобы подсчитать количество неловых токенов в каждом документе в корпусе. Используемый корпус является корпусом Haaretz, состоящим из 27 139 коротких статей на иврите. Значения - это среднее время выполнения в миллисекундах 10 раундов, как сообщается в EXPLAIN ANALYZE :
| Кодирование сервера | default | pg_icu_parser | Замедлять |
|---|---|---|---|
| UTF-8 | 2 566,9974 | 2884,3696 | -12,3% |
| ISO-8859-8 | 3529,6487 | 5 059,3616 | -43,3% |
Конечно, разные среды и разные корпусы могут иметь разные результаты, YMMV.
pg_icu_parser имеет лицензию в соответствии с общественной лицензией Mozilla 2.0.