Elasticsearch – это невероятно быстрое, распределенное, масштабируемое решение с открытым кодом, предназначенное для управления поисковым контентом. Elasticsearch можно легко масштабировать за счет его распределенной архитектуры. Это означает, что по мере роста вашего сайта Elasticsearch будет расти вместе с ним; и по-прежнему гарантировать высокую производительность. Одно из главных преимуществ Elasticsearch – вынос поиска в отдельный сервис, который позволяет сохранить ценные серверные ресурсы вашего сайта.
Почему стоит использовать Elasticsearch
Встроенный в WordPress поиск не оптимизирован для сайтов, сталкивающихся с активными поисковыми запросами или сложными условиями поиска. Это связано с тем, что поиск в WordPress ищет полную фразу в заголовках записей, любые/все поисковые запросы в заголовках записей, а также полные фразы в контенте записи. Поиск опирается на MySQL и не поддерживает сложные вычисления релевантности или расширенные фильтры.
Тестирование
Для тестовой среды мы возьмем следующее:
- VVV2 Vagrant бокс с тестовым сайтом
- Elasticsearch Vagrant бокс – базовая установка с одним кластером
- WordPress 4.7.3 с примерно 24471 записями
- ElasticPress 4.1 для интеграции WP-запросов с ElasticSearch
- Debug Bar и Debug Bar ElasticPress для отслеживания ElasticSearch запросов
- Query Monitor для отслеживания необработанных SQL-запросов
Обычные запросы:
Допустим, что пользователь посетил ваш сайт и ищет «wine country» для поиска релевантных событий. В случае с обычным поиском WordPress поисковой запрос будет выполнен примерно за 987.2мс. Эквивалентный запрос Elasticsearch выполняется примерно за 11мс, что более чем в 89 раз превышает базовый поиск в WordPress.
Сложные запросы:
Теперь давайте представим, что сайт имеет более сложный поиск, который включает в себя форму с несколькими таксономиями, мета-полями, дополнительными ключевыми словами, а также поиском диапазона дат. Пользователь заходит на сайт и ищет все «half marathon» события, которые прошли в промежуток с 1 марта 2017 по 30 июня 2017 в Аризоне или Калифорнии. Такой сложный запрос, в котором даты событий хранятся в метаданных записей, а тип события является таксономией, потребует по меньшей мере 8 подключений MySQL, на что уйдет где-то 1260мс. Эквивалентный запрос Elasticsearch будет выполнен за 16мс.
Тестирование в Apache:
При тестировании в Apache с 10 000 запросов и 100 одновременно действующих пользователей для простого поискового запроса по типу «Short Ribs» получаем следующие результаты:
- Базовый WP — 89.708 [мс]
- SearchWP/FacetWP — 216.619 [мс]
- Elasticsearch — 88.564 [мс]
Используя сложный запрос, который получает записи, метаданные, таксономии, а также даты, применяя 10000 запросов и 100 одновременно действующих пользователей, имеем следующее:
- Сырой SQL — 240.163 [мс]
- Elasticsearch 86.7 [мс]
Другие причины, по которым стоит использовать Elasticsearch
Elasticsearch затрагивает не только поисковые результаты. Он также может использоваться практически для любых запросов с целью увеличения их производительности.
Динамические правила и надстройки могут добавляться к запросам с целью обеспечения большего контроля над выводом результатов поиска. Пример: пользователь, ищущий события в Калифорнии, и некоторые события выводятся над остальными.
Elasticsearch подборки могут использоваться для построения динамических форм, в которых выводятся только термы таксономий, не содержащие пустых элементов.
Можно выводить все или некоторые сайты сети в результатах поиска без пересечения их таблиц.
Также существуют и многочисленные другие методы использования Elasticsearch для повышения производительности и добавления возможностей в поиск вашего сайта.
Заключение
Elasticsearch – хороший способ сделать сайт более эффективным и значительно улучшить его поиск. Будь то сложные формы, простые запросы или комплексные правила, применяемые к поисковым результатам, Elasticsearch с легкостью справится с этим, превзойдя большинство альтернатив.
Источник: https://webdevstudios.com
Когда читаешь такую статью с поиском «half marathon», совершенно не понятно, подходит ли этот чудо метод для сайтов на русском языке, а также для обычного, простого сата.
Безусловно. А разница? Elasticsearch уже давно и активно применяется в ру-сегменте.
Впечатляющие результаты эксперимента! Всегда с удовольствием читаю статьи, в которых есть конкретные данные, а не просто слова.
Простите, но как реализовать сие чудо у себя на сайте?
Прикрутить его к сайту не так-то просто :) Обычно для этого нанимают специалистов.
Понял. Останемся на чистом WP. :)
Все проще, ставите elasticPress и указываете сервер эластика.