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

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

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

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

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

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

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

Содержание

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

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

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

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

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

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

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

Поиск Algolia

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

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

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

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

Elasticsearch

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

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

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

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

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

Amazon CloudSearch

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

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

Relevanssi

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

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

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

SearchWP

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

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

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

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

Данная публикация представляет собой перевод статьи «Improving Native WordPress Search» , подготовленной дружной командой проекта Интернет-технологии.ру