Взаимодействие компонентов
Компоненты 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 поможет разработчикам аддонов эффективно интегрировать свой код с плагином и расширять его функциональность.