Чтобы упростить управление плагинами 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() value. Они могут быть вызлд как фоллws:
SELECT id, attr1 FROM test WHERE match('hello') OPTION ranker=myranker('option1=1');
The call workflow proceeds as follows:
XXX_init()is invoked once per query per table, at the very beginning. Several query-wide options are passed to it via aSPH_RANKER_INITstructure, including the user options strings (for instance, "option1=1" in the example above).XXX_update()is called multiple times for each matched document, with every matched keyword occurrence provided as its parameter, aSPH_RANKER_HITstructure. The occurrences within each document are guaranteed to be passed in ascending order ofhit->hit_posvalues.XXX_finalize()is called once for each matched document when there are no more keyword occurrences. It must return theWEIGHT()value. This function is the only mandatory one.XXX_deinit()is invoked once per query, at the very end.
Плагины фильтров токенов позволяют реализовать пользовательский токенизатор, который создает токены согласно пользовательским правилам. Существует два типа:
- Токенизатор времени индексирования, объявленный с помощью 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()в самом конце обработки запроса.
Отсутствие функций допускается.