Улучшаем стандартный поиск в WordPress

По умолчанию стандартный поиск WordPress отправляет запрос к базе данных веб-сайта. Это выглядит примерно так:

Улучшаем стандартный поиск в WordPress

Проанализируем этот запрос:

  • В таблице wp_posts используем SQL_CALC_FOUND_ROWS.
  • Далее ищем нужное слово(в данном случае я искал «tech») в столбцах post_title, post_excerpt и
  • Запрос гарантирует, что поиск выполняется в записях, на страницах или во вложениях(медиа).
  • Проверяем, будет ли публикация «общедоступной». Для запроса зарегистрированного посетителя поиск выполняется только в приватных публикациях.
  • Результаты поиска сортируем по совпадениям в заголовках(по убыванию) и в хронологическом порядке: самые свежие результаты вначале, а самые старые – в конце.
  • Число результатов по поисковому запросу ограничено десятью, а остальные отображаются постранично.

WordPress проводит перечисленные выше действия, чтобы отобразить результаты поиска. MySQL обрабатывает все строки в wp_posts каждый раз, когда вы выполняется проверка в wp_posts.

Но когда в таблице wp_posts сотни тысяч строк — обработка запроса усложняется. Вот пару результатов тестирований, проведенных на WordPress- веб-сайтах:

Улучшаем стандартный поиск в WordPress

На веб-сайтах с большим числом публикаций запрос выполнялся больше 20 секунд. Такой результат не приемлем для веб-сайтов с большим объемом трафика.

В чем состоит проблема

Почему для некоторых WordPress-сайтов использование стандартного поиска неприемлемо:

  • WordPress выполняет поиск только в полях ввода «post_title», «post_content», «post_excerpt» и только в «записях», «страницах» и «вложениях». Это становится проблемой при использовании пользовательских типов записей.
  • Если на веб-сайте более 100 000 записей, стандартный поиск WordPress становится неэффективен и занимает пару секунд.
  • Низкая производительность обработки поисковых запросов может вызвать проблемы с производительностью сервера, если веб-сайт получает большой объем трафика.

Как улучшить стандартный поиск в WordPress

Очевидно, что стандартный поиск в WordPress – это не лучший вариант для большинства веб-сайтов. Решения проблемы заключается в использовании следующих средств:

  • Которые будут искать контент, не ограничиваясь типами записей, заданными по умолчанию.
  • Которые эффективно работают на веб-сайтах с огромными объемами данных.
  • Которые не будут вызывать проблемы в работе сервера при большом потоке пользователей.

Ниже рассмотрено сразу же пару решений.

Поиск Algolia

Algolia – это поисковое решение корпоративного уровня. Благодаря Algolia все записи и содержимое индексируются вне веб-сайта. В его функционал входит поиск c нечеткими совпадениями, поиск по геолокации, мультиязычная поддержка и поиск по синонимам.

Если сравнивать производительность поиска по умолчанию и Algolia на веб-сайте с тысячами публикаций, преимущество на стороне последнего. Производительность стандартного поиска WordPress:

Улучшаем стандартный поиск в WordPress

Обратите внимание: на выполнение запроса понадобилось 7,43 секунды. Но после внедрения Algolia результаты отображаются почти мгновенно:

Улучшаем стандартный поиск в WordPress

Algolia в 15 раз быстрее стандартного поиска в WordPress. Ещё одно преимущество Algolia заключается в том, что для генерации поисковых выдач используется специальная внешняя служба.

Elasticsearch

ElasticPress выгружает результаты поиска в отдельный экземпляр сервера. Также инструмент может выбрать, где разместить экземпляр Elasticsearch: на рабочем столе, на специальных серверах или на том же сервере, где размещен WordPress- веб-сайт.

При помощи плагина ElasticPress можно легко подключить экземпляр Elasticsearch для использования на веб-сайте.

ElasticPress и Elasticsearch создают совершенную систему поиска. Ее характеристики:

  • В результаты поиска включены продукты WooCommerce;
  • Похожие записи выводятся в результатах поиска быстро;
  • Полная или выборочная индексация содержимого;
  • Доступен «живой поиск».

Поиск осуществляется через оптимизированную службу. Что положительно влияет на производительность больших веб-сайтов.

Amazon CloudSearch

Улучшаем стандартный поиск в WordPress

За использование сервиса оплата берется по мере потребления ресурсов. Это делает CloudSearch недорогим решением корпоративного уровня. Он может самостоятельно задать элементы для индексации.

Lift и некоторые иные сервисы интегрировали CloudSearch в плагины WordPress. Они не особо популярны среди разработчиков и не надежны. Так что придется разрабатывать собственный плагин для Amazon CloudSearch. Для этого воспользуйтесь руководством разработчика для CloudSearch.

Relevanssi

Улучшаем стандартный поиск в WordPress

Relevanssi – это плагин, который оптимизирует стандартный поиск WordPress. Он выполняет поиск по базе данных веб-сайта, отображая более релевантные результаты. Вот пару преимуществ этого плагина:

  • Поиск по частичному совпадению слов;
  • Сортировка по релевантности, а не по дате;
  • Поиск записей, которые соответствуют всем словам из запроса или только одному;
  • Поиск осуществляется по всему контенту, включая комментарии, категории, теги и пользовательские поля ввода;
  • Совпадения в результатах поиска подсвечиваются иным цветом.

Но Relevanssi может быть неэффективен, когда дело касается скорости поиска или масштабируемости.

SearchWP

SearchWP – платный плагин для поиска в WordPress. Он расширяет функции поиска и выводит более релевантные результаты. Но SearchWP не улучшает производительность.

Плагин предлагает широкие функции параметра поиска. Он поддерживает поиск продуктов в eCommerce, PDF и медиа-файлов, пользовательских записей, полей ввода, категорий, тегов и шорткодов. А также поиск по ключевым словам.

Как выбрать правильное решение для поиска

Выбор правильного решения для поиска будет зависеть от бюджета и приоритетов в области оптимизации. Если на первом месте для вас повышение производительности – выбирайте Algolia или Elasticsearch. Если важнее релевантность – Relevanssi или SearchWP. А если надо самостоятельно изменить поиск на веб-сайте, лучшим решением станет Amazon CloudSearch.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *