Для упрощения управления плагинами Buddy, особенно при разработке нового или изменении существующего, предоставлены команды включения и отключения плагинов Buddy. Эти команды действуют временно во время выполнения и сбрасываются к значениям по умолчанию после перезапуска демона или выполнения сброса Buddy. Для постоянного отключения плагина его необходимо удалить.
Для включения или отключения плагина требуется полное квалифицированное имя пакета плагина. Чтобы его найти, можно выполнить запрос SHOW BUDDY PLUGINS и посмотреть полное квалифицированное имя в поле package. Например, плагин SHOW имеет полное квалифицированное имя manticoresoftware/buddy-plugin-show.
ENABLE BUDDY PLUGIN <username/package name on https://packagist.org/>
ПРИМЕЧАНИЕ:
ENABLE BUDDY PLUGINтребует Manticore Buddy. Если команда не работает, убедитесь, что Buddy установлен.
Эта команда повторно активирует ранее отключённый плагин Buddy, позволяя ему снова обрабатывать ваши запросы.
- SQL
ENABLE BUDDY PLUGIN manticoresoftware/buddy-plugin-showDISABLE BUDDY PLUGIN <username/package name on https://packagist.org/>
Эта команда деактивирует активный плагин Buddy, предотвращая его обработку дальнейших запросов.
- SQL
DISABLE BUDDY PLUGIN manticoresoftware/buddy-plugin-showПосле отключения, если вы попробуете выполнить команду SHOW QUERIES, вы получите ошибку, так как плагин отключён.
RELOAD PLUGINS FROM SONAME 'plugin_library'
Перезагружает все плагины (UDF, ранкеры и т.д.) из указанной библиотеки. В некотором смысле процесс перезагрузки является транзакционным, обеспечивая:
- все плагины успешно обновлены до новых версий;
- обновление атомарно, то есть все плагины заменяются одновременно. Эта атомарность гарантирует, что запросы, использующие несколько функций из перезагруженной библиотеки, никогда не будут смешивать старые и новые версии.
Во время RELOAD набор плагинов гарантированно будет консистентным; они будут либо все старыми, либо все новыми.
Процесс перезагрузки также бесшовный, так как какая-то версия перезагруженного плагина всегда будет доступна для одновременных запросов без временных сбоев. Это улучшение по сравнению с использованием пары операторов DROP и CREATE для перезагрузки. При таком подходе существует короткий промежуток между DROP и последующим CREATE, в течение которого запросы технически ссылаются на неизвестный плагин и, следовательно, завершаются с ошибкой.
Если происходит какая-либо ошибка, RELOAD PLUGINS ничего не делает, сохраняет старые плагины и сообщает об ошибке.
В Windows перезапись или удаление DLL-библиотеки, которая в данный момент используется, может быть проблематичной. Однако вы всё ещё можете переименовать её, поместить новую версию под старым именем, и тогда RELOAD сработает. После успешной перезагрузки вы также сможете удалить переименованную старую библиотеку.
mysql> RELOAD PLUGINS FROM SONAME 'udfexample.dll';
Query OK, 0 rows affected (0.00 sec)
Плагины ранжирования позволяют реализовать пользовательский ранжировщик, который получает все вхождения совпавших ключевых слов в документе и вычисляет значение WEIGHT(). Они могут вызываться следующим образом:
SELECT id, attr1 FROM test WHERE match('hello') OPTION ranker=myranker('option1=1');
Последовательность вызовов происходит следующим образом:
XXX_init()вызывается один раз на запрос для каждой таблицы, в самом начале. Ему передаются несколько опций, действующих на весь запрос, через структуруSPH_RANKER_INIT, включая строки пользовательских опций (например, "option1=1" в приведённом выше примере).XXX_update()вызывается несколько раз для каждого совпавшего документа, при этом каждый раз передаётся в качестве параметра вхождение ключевого слова — структураSPH_RANKER_HIT. Вхождения внутри каждого документа гарантированно передаются в порядке возрастания значенийhit->hit_pos.XXX_finalize()вызывается один раз для каждого совпавшего документа, когда больше нет вхождений ключевых слов. Она должна вернуть значениеWEIGHT(). Эта функция является единственной обязательной.XXX_deinit()вызывается один раз на запрос, в самом конце.
Плагины фильтров токенов позволяют реализовать пользовательский токенизатор, который создает токены согласно пользовательским правилам. Существует два типа:
- Токенизатор во время индексации, объявляемый с помощью index_token_filter в настройках таблицы
- Токенизатор во время запроса, объявляемый с помощью директивы OPTION token_filter
В конвейере обработки текста фильтры токенов запускаются после базовой обработки токенизатором (которая обрабатывает текст из полей или запросов и создает из них токены).
Токенизатор во время индексации создается indexer при индексации исходных данных в таблицу или RT таблицей при обработке операторов INSERT или REPLACE.
Плагин объявляется как library name:plugin name:optional string of settings. Функции инициализации плагина могут принимать произвольные настройки, которые передаются в виде строки в формате 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()вызывается в самом конце обработки запроса.
Отсутствие функций допускается.