Архитектура плагинаВзаимодействие компонентов

Взаимодействие компонентов

Компоненты WP Fast Total Search (WPFTS) взаимодействуют друг с другом для обеспечения быстрого и релевантного поиска. Вот как они работают вместе:

  1. Индексатор и база данных: Индексатор (WPFTS_Index) извлекает данные из WordPress (посты, страницы, мета-поля и т.д.), обрабатывает их и сохраняет в базе данных в оптимизированном формате. Он использует класс WPFTS_Database для взаимодействия с базой данных и класс WPFTS_DB для обработки ошибок MySQLi. Данные хранятся в нескольких таблицах, структура которых будет описана в следующем разделе. Индексатор вызывается при активации плагина, при сохранении или удалении постов (хуки save_post и after_delete_post), а также по расписанию cron (хук wpfts_indexer_event).

  2. Поисковый движок и база данных: Когда пользователь выполняет поиск, поисковый движок (WPFTS_Search) получает поисковый запрос и использует индекс, хранящийся в базе данных, для быстрого поиска релевантных постов. Он также использует класс WPFTS_DB для взаимодействия с базой данных. Движок рассчитывает релевантность результатов и сортирует их согласно настройкам. Взаимодействие с WordPress происходит через хуки pre_get_postsposts_searchposts_joinposts_search_orderby и другие.

  3. Поисковый движок и генератор Smart Excerpts: После того, как поисковый движок нашел релевантные посты, генератор Smart Excerpts (WPFTS_Result_Item) создает отрывки текста, содержащие найденные ключевые слова. Движок передает генератору необходимые данные о постах и поисковом запросе. Генератор использует различные фильтры (например, wpfts_get_sentence_styleswpfts_se_datawpfts_se_output) для настройки внешнего вида отрывков.

  4. Виджет и поисковый движок: Виджет Live Search (WPFTS_Custom_Widget) предоставляет пользовательский интерфейс для поиска. Когда пользователь вводит запрос, виджет отправляет его поисковому движку через AJAX (хуки wp_ajax_nopriv_wpfts_autocomplete и wp_ajax_wpfts_autocomplete). Движок возвращает результаты поиска, которые отображаются в виджете.

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