Статьи

Улучшение нативного поиска WordPress

Эта статья о поиске в WordPress была первоначально опубликована журналом Torque Magazine и воспроизводится здесь с разрешения.

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

Как WordPress ищет

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

Собственный поисковый запрос к базе данных WordPress

Давайте разберем этот запрос немного.

  • Во-первых, мы используем SQL_CALC_FOUND_ROWSwp_posts Это говорит о том, что если бы не было предела (будет позже), сколько результатов получит следующий запрос?
  • Затем мы ищем в post_titlepost_excerptpost_contentwp_posts
  • И мы гарантируем, что возвращаемое содержимое — это пост, страница или вложение (медиа).
  • Мы проверяем, чтобы убедиться, что статус «общедоступный» — не удален или закрыт (если вы вошли в систему, он также будет искать только ваши личные сообщения).
  • Мы упорядочиваем результаты, сопоставляя заголовок по убыванию или по дате публикации по убыванию.
  • Наконец, мы ограничиваем результаты до 10, разбивая на страницы остальные результаты.

Это множество проверок, которые проходит WordPress только для того, чтобы вернуть результаты поиска. И каждый раз, когда вы выполняете каждую проверку в wp_posts, MySQL обрабатывает все строки в wp_posts. Когда у вас есть сотни тысяч строк в таблице wp_posts Вот несколько тестов с нескольких моих сайтов:

Гистограмма, показывающая время запроса на количество сообщений

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

Идентификация проблемы

Зная, что мы теперь знаем о поисковом поведении по умолчанию, важно выяснить, почему это не может быть идеальным для некоторых веб-сайтов.

  • WordPress выполняет поиск только по полям «post_title», «post_content» и «post_excerpt» по вашим поисковым запросам. Также представлены только типы записей «пост», «страница» и «вложение». Для пользователей с пользовательскими типами записей, настраиваемыми полями или плагинами, такими как WooCommerce, которые добавляют разные типы страниц / сообщений, это может быть проблематично: эти элементы не будут отображаться в результатах поиска.
  • Запрос, используемый поиском WordPress, работает очень плохо — более 100 000 сообщений. Для новостных сайтов или медиа-сайтов с более чем 100 000 публикаций поиск может занять несколько секунд.
  • Низкая производительность поискового запроса может вызвать проблемы с производительностью сервера, если ваш сайт получает достаточное количество поискового трафика.

Улучшение собственного поиска в WordPress

Так что теперь, когда мы знаем, что собственный поиск WordPress не подходит для многих сайтов, мы можем исследовать поисковые решения. Основываясь на нашей идентификации проблемы выше, наша квалификация для решения поиска включает в себя:

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

Ниже мы рассмотрим несколько решений, в том числе внешние сервисы корпоративного уровня и плагины WordPress.

Алголия Поиск

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

Сравнивая эффективность поиска на сайте с тысячами постов, у Algolia есть некоторые явные преимущества. Ниже приведена производительность поиска WordPress по умолчанию:

DevTool представление производительности поиска WordPress по умолчанию

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

DevTool вид производительности поиска Алголии

Результаты Algolia были примерно в 15 раз быстрее, чем стандартный поиск WordPress! Это огромное улучшение производительности. Не говоря уже о том, что если сайт поддерживает большой объем трафика при одновременных поисках, это не вызовет нагрузки на сервер. Выгрузка поисков во внешнюю службу, специально оптимизированную для поиска, является большой победой.

Elasticsearch

ElasticPress — это продукт, созданный Elastic, который переносит ваш поиск на ваш собственный экземпляр сервера Elasticsearch. Этот инструмент поиска уникален тем, что вы можете выбрать, где разместить свой экземпляр Elasticsearch: локальный рабочий стол, выделенные серверы или даже на том же сервере, где размещен ваш сайт WordPress. А с помощью плагина ElasticPress вы можете легко подключить этот экземпляр к своему веб-сайту для использования.

ElasticPress + ElasticSearch — это выигрышная комбинация, которая обеспечивает отличные функции поиска, такие как:

  • Включение продуктов WooCommerce в результаты поиска
  • Показывать похожие посты без дорогих, медленных запросов
  • Выберите, чтобы проиндексировать все, некоторые или только выбрать контент на вашем сайте
  • Автоматически завершать поиск предложений по мере ввода пользователей

Поскольку поиск выгружается в службу, оптимизированную для поиска, также увеличивается влияние на производительность сайтов с тысячами постов.

Amazon CloudSearch

CloudSearch

Сервис CloudSearch от Amazon является жизнеспособным вариантом с точки зрения мощности, производительности и масштабируемости. Amazon использует платежную услугу «оплата по факту», и это делает CloudSearch недорогим решением корпоративного уровня. Вы также можете настроить, какие элементы индексируются в процессе установки, но кривая обучения для этого продукта крутая. В то время как некоторые, такие как Lift , создали плагины WordPress, интегрирующие CloudSearch, они не используются широко или часто обновляются и могут быть не такими надежными. Это означает, что есть вероятность, что вы будете разрабатывать собственную реализацию плагина Amazon CloudSearch. Вы можете использовать их Руководство разработчика для CloudSearch, чтобы начать.

Relevanssi

Relevanssi

Relevanssi — это плагин для WordPress, который оптимизирует собственный поиск WordPress «внутри компании», то есть он ищет вашу собственную базу данных на вашем собственном сервере, просто с лучшими результатами. Некоторые ключевые преимущества этого плагина по сравнению с поиском по умолчанию в WordPress:

  • Нечеткие поиски (включая частичные совпадения)
  • Сортировать по релевантности, а не по дате
  • Выберите, должны ли результаты соответствовать всем словам или только одному из слов
  • Поиск по всему содержанию, включая комментарии, категории, теги и настраиваемые поля
  • Выдержки отображают и выделяют, где совпадение произошло для контекста

Один аспект, который Relevanssi не обязательно улучшит, — это скорость или масштабируемость функции поиска. Таким образом, Relevanssi идеально подходит для пользователей, которые разочарованы типом результатов, которые производит поиск WordPress. Это не идеально для пользователей, которые ищут улучшения производительности в поиске.

SearchWP

И последнее, но не менее важное , SearchWP — еще одно платное поисковое решение для WordPress. Как и в случае с Relevanssi, этот плагин расширяет поиск, добавляя лучшие результаты, но не претендует на повышение эффективности поиска. SearchWP имеет широкие возможности конфигурации, чтобы включить именно то, что вы хотите в результатах поиска. Ищите такие вещи, как: продукты электронной коммерции, PDF-файлы и мультимедиа, настраиваемые сообщения и поля, категории и теги, а также вывод коротких кодов. Помимо дополнительных векторов поиска, SearchWP также предлагает ключевые слова. Поэтому, если ваш конечный пользователь выполняет поиск по связанному ключевому слову, он получит контент из связанных ключевых слов в результатах.

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

Выбор правильного поискового решения

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