Взаимодействие компонентов
Компоненты WP Fast Total Search (WPFTS) взаимодействуют друг с другом для обеспечения быстрого и релевантного поиска. Вот как они работают вместе:
-
Индексатор и база данных: Индексатор (
WPFTS_Index) извлекает данные из WordPress (посты, страницы, мета-поля и т.д.), обрабатывает их и сохраняет в базе данных в оптимизированном формате. Он использует классWPFTS_Databaseдля взаимодействия с базой данных и классWPFTS_DBдля обработки ошибок MySQLi. Данные хранятся в нескольких таблицах, структура которых будет описана в следующем разделе. Индексатор вызывается при активации плагина, при сохранении или удалении постов (хукиsave_postиafter_delete_post), а также по расписанию cron (хукwpfts_indexer_event). -
Поисковый движок и база данных: Когда пользователь выполняет поиск, поисковый движок (
WPFTS_Search) получает поисковый запрос и использует индекс, хранящийся в базе данных, для быстрого поиска релевантных постов. Он также использует классWPFTS_DBдля взаимодействия с базой данных. Движок рассчитывает релевантность результатов и сортирует их согласно настройкам. Взаимодействие с WordPress происходит через хукиpre_get_posts,posts_search,posts_join,posts_search_orderbyи другие. -
Поисковый движок и генератор Smart Excerpts: После того, как поисковый движок нашел релевантные посты, генератор Smart Excerpts (
WPFTS_Result_Item) создает отрывки текста, содержащие найденные ключевые слова. Движок передает генератору необходимые данные о постах и поисковом запросе. Генератор использует различные фильтры (например,wpfts_get_sentence_styles,wpfts_se_data,wpfts_se_output) для настройки внешнего вида отрывков. -
Виджет и поисковый движок: Виджет Live Search (
WPFTS_Custom_Widget) предоставляет пользовательский интерфейс для поиска. Когда пользователь вводит запрос, виджет отправляет его поисковому движку через AJAX (хукиwp_ajax_nopriv_wpfts_autocompleteиwp_ajax_wpfts_autocomplete). Движок возвращает результаты поиска, которые отображаются в виджете. -
Fire & Flare: Для быстрой синхронизации между серверной и клиентской частью (например, для отображения статуса индексации в реальном времени) используется микросервис
Fire & Flare. Компонент Fire на сервере отправляет короткие пакеты данных компоненту Flare на клиенте через регулярные промежутки времени. КлассWPFTS_Flareотвечает за отправку данных на сервере, а JavaScript-код на клиенте обрабатывает полученные данные.
Схема взаимодействия
[Пользователь] --> [Виджет] --AJAX--> [Поисковый движок] --> [База данных]
^
|
+--- [Генератор Smart Excerpts]
[Cron] --> [Индексатор] --> [База данных]
[WordPress (save_post, after_delete_post)] --> [Индексатор] --> [База данных]
[Fire (сервер)] --HTTP--> [Flare (клиент)]Дополнительные замечания
-
WPFTS использует транзиенты (transients) для хранения временных данных, таких как статус индексации.
-
Для синхронизации процессов и предотвращения конфликтов используются семафоры (класс WPFTS_Semaphore).
-
Плагин предоставляет разработчикам множество фильтров для модификации поведения компонентов и их взаимодействия.
Понимание взаимодействия компонентов WPFTS поможет разработчикам аддонов эффективно интегрировать свой код с плагином и расширять его функциональность.