Плагины фильтров токенов позволяют реализовать пользовательский токенизатор, который создает токены согласно пользовательским правилам. Существует два типа:
- Токенизатор времени индексирования, объявленный с помощью index_token_filter в настройках таблицы
- Токенизатор времени запроса, объявленный директивой OPTION token_filter
В конвейере обработки текста фильтры токенов выполняются после обработки базового токенизатора (который обрабатывает текст из полей или запросов и создает токены из них).
Токенизатор времени индексирования создается indexer при индексировании исходных данных в таблицу или RT таблицей при обработке операторов INSERT или REPLACE.
Плагин объявляется как имя библиотеки:имя плагина:необязательная строка настроек. Функции инициализации плагина могут принимать произвольные настройки, которые можно передать в виде строки в формате option1=value1;option2=value2;...
Пример:
index_token_filter = my_lib.so:email_process:field=email;split=.io
Последовательность вызовов для фильтра токенов времени индексирования следующая:
- Вызывается
XXX_init()сразу после того, какindexerсоздает фильтр токенов с пустым списком полей, а затем после того, как indexer получает схему таблицы с фактическим списком полей. Он должен возвращать ноль при успешной инициализации или описание ошибки в противном случае. - Вызывается
XXX_begin_documentтолько для RT таблиц при операцияхINSERT/REPLACEдля каждого документа. Он должен возвращать ноль при успешном вызове или описание ошибки в противном случае. С помощью OPTIONtoken_filter_optionsможно передавать дополнительные параметры/настройки в функцию.INSERT INTO rt (id, title) VALUES (1, 'some text corp@space.io') OPTION token_filter_options='.io' - Вызывается
XXX_begin_fieldодин раз для каждого поля перед обработкой поля базовым токенизатором, с номером поля в качестве параметра. - Вызывается
XXX_push_tokenодин раз для каждого нового токена, созданного базовым токенизатором, с исходным токеном в качестве параметра. Он должен возвращать токен, количество дополнительных токенов, созданных фильтром токенов, и дельту позиции для токена. - Вызывается
XXX_get_extra_tokenнесколько раз в случае, еслиXXX_push_tokenсообщает о дополнительных токенах. Он должен возвращать токен и дельту позиции для данного дополнительного токена. - Вызывается
XXX_end_fieldодин раз сразу после обработки исходных токенов из текущего поля. - Вызывается
XXX_deinitв самом конце индексации.
Следующие функции обязательны для определения: XXX_begin_document, XXX_push_token и XXX_get_extra_token.
Токенизатор времени запроса создается при каждом поиске полнотекстового запроса для каждой задействованной таблицы.
Последовательность вызовов для фильтра токенов времени запроса следующая:
- Вызывается
XXX_init()один раз для каждой таблицы до разбора запроса с параметрами — максимальная длина токена и строка, установленная опциейtoken_filterSELECT * FROM index WHERE MATCH ('test') OPTION token_filter='my_lib.so:query_email_process:io'Он должен возвращать ноль при успешной инициализации или описание ошибки в противном случае.
- Вызывается
XXX_push_token()один раз для каждого нового токена, созданного базовым токенизатором, с параметрами: токен, созданный базовым токенизатором, указатель на необработанный токен в исходной строке запроса и длина необработанного токена. Он должен возвращать токен и дельту позиции для токена. - Вызывается
XXX_pre_morph()один раз для токена непосредственно перед передачей в морфологический процессор с передачей ссылки на токен и флага стоп-слова. Может устанавливать флаг стоп-слова, чтобы пометить токен как стоп-слово. - Вызывается
XXX_post_morph()один раз для токена после обработки морфологическим процессором с передачей ссылки на токен и флага стоп-слова. Может устанавливать флаг стоп-слова, чтобы пометить токен как стоп-слово. Должен возвращать флаг, ненулевое значение которого означает использование токена до морфологической обработки. - Вызывается
XXX_deinit()в самом конце обработки запроса.
Отсутствие функций допускается.
indextool — это полезная утилита, которая извлекает различную информацию о физической таблице, исключая template или distributed таблицы. Вот общий синтаксис использования indextool:
indextool <command> [options]
Эти опции применимы ко всем командам:
--config <file>(-c <file>для краткости) позволяет переопределить стандартные имена файлов конфигурации.--quiet(-qдля краткости) подавляет вывод баннеров и подобных сообщений отindextool.--help(-hдля краткости) показывает все параметры, доступные в вашей конкретной сборкеindextool.-vотображает информацию о версии вашей конкретной сборкиindextool.
Доступные команды:
--checkconfigзагружает и проверяет файл конфигурации, проверяя его валидность и наличие синтаксических ошибок.--buildidf DICTFILE1 [DICTFILE2 ...] --out IDFILEстроит IDF-файл из одного или нескольких дампов словарей (см.--dumpdict). Дополнительный параметр--skip-uniqпропускает уникальные слова (df=1).--build-infixes TABLENAMEгенерирует инфиксные поиски для уже существующей таблицы dict=keywords (обновляет .sph, .spi на месте). Используйте эту опцию для старых файлов таблиц, уже использующих dict=keywords, но теперь требующих поддержки инфиксного поиска; обновление файлов таблиц с помощью indextool может быть проще или быстрее, чем их пересоздание с нуля с помощью indexer.--dumpheader FILENAME.sphбыстро выводит указанный файл заголовка таблицы без изменения других файлов таблицы или даже конфигурационного файла. Отчет содержит подробный обзор всех настроек таблицы, особенно полный список атрибутов и полей.--dumpconfig FILENAME.sphизвлекает определение таблицы из указанного файла заголовка таблицы в (почти) формате, соответствующем manticore.conf.--dumpheader TABLENAMEвыводит заголовок таблицы по имени таблицы, при этом путь к заголовку ищется в конфигурационном файле.--dumpdict TABLENAMEвыводит словарь. Дополнительный переключатель-statsдобавит общее количество документов в дамп словаря. Это необходимо для файлов словаря, используемых при создании IDF-файлов.--dumpdocids TABLENAMEвыводит идентификаторы документов по имени таблицы.--dumphitlist TABLENAME KEYWORDвыводит все вхождения указанного ключевого слова в данной таблице, при этом ключевое слово задается в виде текста.--dumphitlist TABLENAME --wordid IDвыводит все вхождения конкретного ключевого слова в данной таблице, представленное внутренним числовым ID.--dumpkilllist TABLENAMEвыводит содержимое kill-листа указанной таблицы, включая цели и флаги. Также может использоваться как--dumpkilllist FILENAME.spk.--docextract TBL DOCIDвыполняет стандартную проверку таблицы по всем словарям/документам/попаданиям и собирает все слова и попадания, связанные с запрашиваемым документом. Затем все слова сортируются по полям и позициям, и результат выводится, сгруппированный по полям.--fold TABLENAME OPTFILEэта опция помогает понять, как токенизатор обрабатывает входные данные. Можно передать indextool текст из файла, если он указан, или из stdin в противном случае. Вывод заменит разделители пробелами (основываясь на ваших настройкахcharset_table) и преобразует буквы в словах в нижний регистр.--htmlstrip TABLENAMEприменяет настройки HTML-стриппера для указанной таблицы для фильтрации stdin и посылает результаты фильтрации в stdout. Учтите, что настройки будут браться из manticore.conf, а не из заголовка таблицы.--mergeidf NODE1.idf [NODE2.idf ...] --out GLOBAL.idfобъединяет несколько .idf файлов в один. Дополнительный параметр--skip-uniqбудет игнорировать уникальные слова (df=1).--morph TABLENAMEприменяет морфологию ко входным данным из stdin и направляет результат в stdout.--check TABLENAMEпроверяет файлы данных таблицы на ошибки согласованности, которые могут быть вызваны ошибками вindexerили аппаратными сбоями.--checkтакже работает с RT таблицами, RAM и дисковыми сегментами. Дополнительные опции:--check-id-dupsпроверяет дубликаты ID документов в обычной таблице и всех дисковых сегментах RT таблицы--check-disk-chunk CHUNK_NAMEпроверяет только конкретный дисковый сегмент RT таблицы. Аргумент — числовое расширение дискового сегмента RT таблицы, который нужно проверить.
--strip-pathудаляет пути из всех имен файлов, на которые ссылается таблица (стоп-слова, словоформы, исключения и т.д.). Это полезно при проверке таблиц, построенных на другой машине, где могут быть разные расположения путей.--rotateсовместимо только с--checkи определяет, следует ли проверять таблицу, ожидающую ротации, то есть с расширением .new. Это полезно, если вы хотите проверить таблицу перед её фактическим запуском.--apply-killlistsзагружает и применяет kill-листы для всех таблиц, перечисленных в конфигурационном файле. Изменения сохраняются в .SPM файлах. Файлы kill-листов (.SPK) удаляются. Это может быть удобно, если вы хотите перенести применение таблиц со старта сервера на стадию индексации.
indextool не может полностью проверить RT таблицу, которая в данный момент обслуживается демоном. При попытке проверить активную RT таблицу вы можете столкнуться со следующим предупреждением:
WARNING: failed to load RAM chunks, checking only N disk chunks
Чтобы избежать этих предупреждений и обеспечить корректную проверку RT таблицы, рассмотрите следующие варианты:
- остановите демон перед запуском
indextool --check. - убедитесь, что RT таблица не обслуживается демоном.
- проверьте отдельную копию RT таблицы вместо живой.
Если остановка демона невозможна, вы можете предотвратить нежелательные изменения RT таблицы, выполнив следующую MySQL-команду перед запуском indextool --check:
SET GLOBAL AUTO_OPTIMIZE=0;
Эта команда предотвращает автоматическую оптимизацию демоном, гарантируя, что файлы RT-таблиц остаются неизменными. После выполнения этой команды дождитесь полной остановки потока оптимизации, прежде чем выполнять indextool --check. Это гарантирует, что никакие дисковые чанки не будут случайно изменены или удалены в процессе проверки.
Если автоматическая оптимизация была ранее включена, её следует вручную включить снова после завершения проверки, выполнив:
SET GLOBAL AUTO_OPTIMIZE=1;
Команда spelldump предназначена для извлечения содержимого из файла словаря, использующего формат ispell или MySpell. Это может быть полезно, когда вам нужно составить списки слов для wordforms, так как она генерирует все возможные формы для вас.
Вот общий синтаксис:
spelldump [options] <dictionary> <affix> [result] [locale-name]
Основными параметрами являются основной файл и файл аффиксов словаря. Обычно они называются [language-prefix].dict и [language-prefix].aff соответственно. Эти файлы можно найти в большинстве стандартных дистрибутивов Linux или в многочисленных онлайн-источниках.
Параметр [result] указывает, где будут сохранены извлечённые данные словаря, а [locale-name] — параметр, используемый для указания сведений о локали по вашему выбору.
Также есть необязательная опция -c [file]. Эта опция позволяет указать файл для сведений о преобразовании регистра.
Вот несколько примеров использования:
spelldump en.dict en.aff
spelldump ru.dict ru.aff ru.txt ru_RU.CP1251
spelldump ru.dict ru.aff ru.txt .1251
Результирующий файл будет содержать все слова из словаря, расположенные в алфавитном порядке и отформатированные как файл wordforms. Затем вы можете изменить этот файл в соответствии с вашими конкретными требованиями. Вот пример того, как может выглядеть выходной файл:
zone > zone
zoned > zoned
zoning > zoning
Инструмент wordbreaker предназначен для разбора составных слов, часто встречающихся в URL-адресах, на их отдельные компоненты. Например, он может разобрать "lordoftherings" на четыре отдельных слова или разбить http://manofsteel.warnerbros.com на "man of steel warner bros". Эта возможность улучшает функциональность поиска, устраняя необходимость в префиксах или инфиксах. Для иллюстрации: поиск по запросу "sphinx" не даст в результатах "sphinxsearch". Однако если вы примените wordbreaker для разбора составного слова и проиндексируете отдельные элементы, поиск будет успешным без увеличения размера файла, связанного с использованием префиксов или инфиксов при полнотекстовом индексировании.
Вот несколько примеров использования wordbreaker:
echo manofsteel | bin/wordbreaker -dict dict.txt split
man of steel
Файл словаря -dict используется для разделения входного потока на отдельные слова. Если файл словаря не указан, Wordbreaker будет искать файл с именем wordbreaker-dict.txt в текущем рабочем каталоге. (Убедитесь, что файл словаря соответствует языку составного слова, с которым вы работаете.) Команда split разбивает слова из стандартного ввода и отправляет результаты в стандартный вывод. Команды test и bench также доступны для оценки качества разбиения и измерения производительности функции разбиения соответственно.
Wordbreaker использует словарь для идентификации отдельных подстрок в заданной строке. Чтобы различать несколько возможных вариантов разбиения, он учитывает относительную частоту каждого слова в словаре. Более высокая частота указывает на более высокую вероятность разбиения по этому слову. Чтобы создать файл такого типа, вы можете использовать инструмент indexer:
indexer --buildstops dict.txt 100000 --buildfreqs myindex -c /path/to/manticore.conf
что создаст текстовый файл с именем dict.txt, содержащий 100 000 наиболее часто встречающихся слов из myindex вместе с их соответствующими частотами. Поскольку этот выходной файл представляет собой простой текстовый документ, у вас есть возможность вручную редактировать его при необходимости. Не стесняйтесь добавлять или удалять слова по мере необходимости.
API Manticore Search задокументировано с использованием спецификации OpenAPI, которая может быть использована для генерации клиентских SDK. Машиночитаемый YAML-файл доступен по адресу https://raw.githubusercontent.com/manticoresoftware/openapi/master/manticore.yml
Вы также можете просмотреть визуализированную спецификацию с помощью онлайн-редактора Swagger здесь.
В Manticore мы собираем различные анонимные метрики для повышения качества наших продуктов, включая Manticore Search. Анализируя эти данные, мы можем не только улучшить общую производительность нашего продукта, но и определить, какие функции стоит приоритизировать, чтобы обеспечить пользователям еще большую ценность. Система телеметрии работает в отдельном потоке в неблокирующем режиме, делая снимки и отправляя их раз в несколько минут.
Мы серьезно относимся к вашей конфиденциальности, и вы можете быть уверены, что все метрики полностью анонимны и никакая чувствительная информация не передается. Однако, если вы все же хотите отключить телеметрию, у вас есть такая возможность:
- Установив переменную окружения
TELEMETRY=0 - Или установив
telemetry = 0в разделеsearchdвашего конфигурационного файла
Вот список всех метрик, которые мы собираем:
Символ ⏱️ указывает, что метрика собирается периодически, в отличие от других метрик, которые собираются на основе конкретных событий.
| Метрика | Описание |
|---|---|
invocation |
Отправляется при запуске Manticore Buddy |
plugin_* |
Указывает, что плагин с данным именем был выполнен, например, plugin_backup для выполнения резервного копирования |
command_* |
⏱️ Все метрики с этим префиксом отправляются из запроса show status демона Manticore |
uptime |
⏱️ Время работы демона Manticore Search |
workers_total |
⏱️ Количество воркеров, используемых Manticore |
cluster_count |
⏱️ Сколько кластеров обрабатывает этот узел |
cluster_size |
⏱️ Сколько узлов во всех кластерах |
table_*_count |
⏱️ Количество созданных таблиц каждого типа: plain, percolate, rt, или distributed |
*_field_*_count |
⏱️ Количество для каждого типа поля для таблиц с типами rt и percolate |
columnar |
⏱️ Указывает, что использовалась библиотека Columnar |
columnar_field_count |
⏱️ Количество полей, использующих библиотеку Columnar |
Инструмент резервного копирования Manticore по умолчанию отправляет анонимные метрики на сервер метрик Manticore, чтобы помочь улучшить продукт. Если вы не хотите отправлять телеметрию, вы можете отключить ее, запустив инструмент с флагом --disable-metric или установив переменную окружения TELEMETRY=0.
Ниже приведен список всех собираемых метрик:
| Метрика | Описание |
|---|---|
invocation |
Отправляется при инициации резервного копирования |
failed |
Отправляется в случае неудачного резервного копирования |
done |
Отправляется при успешном резервном копировании/восстановлении |
arg_* |
Аргументы, использованные для запуска инструмента (исключая имена индексов и т.п.) |
backup_store_versions_fails |
Указывает на ошибку при сохранении версии Manticore в резервной копии |
backup_table_count |
Общее количество сохраненных в резервную копию таблиц |
backup_no_permissions |
Неудачное резервное копирование из-за недостаточных прав на целевую директорию |
backup_total_size |
Общий размер полной резервной копии |
backup_time |
Продолжительность резервного копирования |
restore_searchd_running |
Не удалось запустить процесс восстановления из-за запущенного searchd |
restore_no_config_file |
Конфигурационный файл не найден в резервной копии при восстановлении |
restore_time |
Продолжительность восстановления |
fsync_time |
Продолжительность fsync |
restore_target_exists |
Возникает, если папка или индекс уже существует в целевой папке восстановления |
terminations |
Указывает, что процесс был завершен |
signal_* |
Сигнал, использованный для завершения процесса |
tables |
Количество таблиц в Manticore |
config_unreachable |
Указанный конфигурационный файл не существует |
config_data_dir_missing |
Ошибка при разборе data_dir из указанного конфигурационного файла |
config_data_dir_is_relative |
Путь data_dir в конфигурационном файле экземпляра Manticore является относительным |
Каждая метрика снабжена следующими метками:
| Метка | Описание |
|---|---|
collector |
buddy. Указывает, что метрика собрана через Manticore Buddy |
os_name |
Название операционной системы |
os_release_name |
Название из /etc/os-release, если доступно, иначе unknown |
os_release_version |
Версия из /etc/os-release, если доступно, иначе unknown |
dockerized |
Если запущено в среде Docker |
official_docker |
В случае Docker — флаг, показывающий, что используется официальный образ |
machine_id |
Идентификатор сервера (содержимое /etc/machine-id в Linux) |
arch |
Архитектура машины, на которой запущено ПО |
manticore_version |
Версия Manticore |
columnar_version |
Версия библиотеки Columnar, если она установлена |
secondary_version |
Версия вторичной библиотеки, если установлена библиотека Columnar |
knn_version |
Версия библиотеки KNN, если установлена библиотека Columnar |
buddy_version |
Версия Manticore Buddy |