Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress

Полнотекстовый поиск WordPress с помощью ElasticSearch

by
Difficulty:BeginnerLength:LongLanguages:

Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)

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

Проблема поиска WordPress

Что случилось с поиском в WordPress? Проще говоря, это наивное решение с простым запросом MySQL для поиска.

  • WordPress сортирует результат поиска по дате поста, отличному от того, насколько релевантен результат для поискового запроса.
  • Поиск - это просто комбинация LIKE, вместе с %query% а это означает, что никакой индекс не используется. Без индексации он может быстро убить вашу базу данных на сайте с высоким трафиком, если у вас много поиска.
  • Он ищет точную фразу. Если я ищу «zsh on arch linux», WordPress возвращает нулевые результаты, даже если у вас много сообщений, содержащих эти слова. Обычно вы не ожидаете, что пользователь введет точную фразу, не так ли?
  • Он не поддерживает нечеткий поиск. Если пользователи делают опечатку, у них нет шансов получить ожидаемый результат.

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

Мы преодолеем эти проблемы, используя поисковую систему для индексации и поиска наших данных. Мы можем думать об использовании MySQL Full Text Search или что-то подобное. Хотя это и возможно, это не может быть лучшим решением. Вы должны определить схему, вам нужно изменить базу данных WordPress по умолчанию, добавить индексы и т.д.

Если вы хотите переиндексировать большую таблицу, вы можете ввести блокировку и запретить сайту принимать новые посты. Более того, это все еще является ударом для вашей базы данных MySQL. На сайте с большими объемами трафика с большим количеством поиска он может замедлить работу базы данных. При использовании такого продукта, как ElasticSearch, вы устраняете эти проблемы. Он быстрый, эффективный, оптимизированный для поиска с большим количеством дополнительных функций, и это даже без использования схемы, вы можете легко добавлять или удалять поля.

В этом уроке мы рассмотрим следующие два шага:

  1. Настройка ElasticSearch.
  2. Настройка плагина для индексации данных в ElasticSearch и поиска.

Хорошим моментом является то, что плагин вернется к поиску по умолчанию WordPress, если сервер ElasticSearch вдруг будет недоступен.

Требования

Вы должны использовать VPS для установки на нем поисковой системы. Если вы используете обычную службу общедоступного хостинга, вы можете использовать OpenShift в качестве альтернативного сервера для установки нашей поисковой системы позже.

Красота ElasticSearch

ElasticSearch - это гибкий и мощный, распределенный механизм поиска и анализа в режиме реального времени. Вы можете отправить данные в него и быстро получить назад проиндексированные и готовые к поиску данные. Он очень оптимизирован для своей работы: поиск. Более того, результаты включают в себя значение того, насколько хорошие данные соответствуют поисковому запросу. ElasticSearch даже поставляется с REST API, который позволяет вам легко выполнять поиск или играть с ним во время тестирования/разработки с помощью инструмента Sense.

Обратите внимание на эту страницу, если вы хотите узнать больше об этом. Их сайт широко документирован. Дополнительную информацию можно найти на странице Stack Overflow.

1. Установка ElasticSearch на вашем сервере

В зависимости от вашего дистрибутива Linux вам может потребоваться обратиться к его документации, чтобы узнать, как установить ElasticSearch. Кроме того, вы можете следовать общему учебнику ElasticSearch.

Ubuntu/Debian (или распределенные на основе APT)

Centos/RedHat (или YUM-based Distributions)

После установки поместите это в конфигурационный файл ElasticSearch:

Сохраните файл. И продолжайте установку с помощью yum. Обратите внимание, что мы должны установить Java 6 из стороннего репозитория, если ваш репозиторий CentOS не имеет Java 6.

После запуска ElasticSearch вы можете подтвердить, что он работает правильно, посетив ваш домен на порту 9200 как yourdomain.com:9200 в браузере или выполнив запрос с помощью curl.

Если у вас нет VPS и вы все еще хотите его использовать, вы можете использовать платформу OpenShift для установки ElasticSearch на нее. Если вы установили ElasticSearch на свой сервер, перейдите к следующему разделу.

2. Установка ElasticSearch на OpenShift

ElasticSearch можно легко установить, загрузив программный пакет и запустив двоичный файл. Java 6 - единственная зависимость. OpenShift дает нам вид виртуального сервера, на котором мы можем установить на нем свое собственное программное обеспечение.

Зарегистрируйтесь для создания учетной записи на https://www.openshift.com/. Затем войдите в свою панель управления или введите этот URL https://openshift.redhat.com/app/console/applications после того, как вы вошли в систему. Нажмите « Applications», введите «DIY», чтобы отфильтровать поле.

Затем нажмите на заголовок «Do-It-Yourself 0.1», чтобы добавить приложение в свою учетную запись. Это означает, что мы сами настроим приложение. Здесь у вас будет возможность назвать ваше приложение и получить поддомен, например appnamesubdomain.rhccloud.com. Подождите, пока установка будет завершена, затем нажмите «Продолжить на странице обзора приложений», чтобы перейти на страницу обзора приложений.

На этой странице вы увидите доменное имя своего приложения. Нам понадобится это позже, чтобы настроить URL-адрес сервера ElasticSearch. В правом нижнем углу вы можете увидеть «Удаленный доступ». Благодаря этому доступу мы сможем запустить команду оболочки и установить ее точно так же, как с обычным VPS. Мы собираем информацию SSH для удаленного доступа в наше приложение и устанавливаем ElasticSearch.

Обратите внимание на команду ssh 536ea3e4500446d9db000279@diy-notyim.rhcloud.com, мы будем использовать ее для удаленного доступа к нашему серверу на OpenShift. diy-notyim.rhcloud.com - ваш адрес сервера, ssh - это команда, которую мы используем для удаленного доступа.

Чтобы войти в систему через SSH, вы должны предоставить свой открытый ключ OpenShift. Перейдите на вкладку «Настройка» и нажмите «Добавить публичный ключ» ...

Просто скопируйте и вставьте содержимое своего публичного ключа в него. Ваш публичный ключ обычно находится в папке ~/.ssh/id_rsa.pub. Если вы не знакомы с публичными ключами, прочитайте эти руководства о том, как их создавать:

  1. Настройка SSH-ключей
  2. SSH: Что и как

После того, как вы добавите свой ключ на веб-сайт OpenShift, введите эту команду, чтобы подключиться к нему. Обратите внимание, что ваш адрес будет отличаться от моего.

Вас приветствует экран, подобный этому:

Мы загрузим и установим ElasticSearch вручную. Тем не менее, мы должны хранить файл загрузки в папке $OPENSHIFT_DATA_DIR из-за ее сохранения между развертыванием. Во время развертывания OpenShift удаляет почти все файлы и папки и использует сборку инструкции в приложении для создания и развертывания приложения.

Обратите внимание, что OpenShift имеет специальную папку, которая используется для хранения постоянных данных между несколькими развертываниями. $OPENSHIFT_DATA_DIR - путь хранения переменных окружения. Выполните следующую команду для загрузки, установки и запуска ElasticSearch.

Когда вы находитесь внутри папки elasticsearch-1.1.1, вы должны изменить ключи и значения в файле config/elasticsearch.yml. Вы можете использовать nano или vi/vim для редактирования файла и редактирования этого значения После редактирования и сохранения. Запустите ElasticSearch. Подождите немного, чтобы он запустился. Отсюда ваш URL-адрес ElasticSearch может быть открыт через ранее установленный домен. В моем случае это http://diy-notyim.rhccloud.com. Обратите внимание, что мы не используем порт по умолчанию 9200, потому что OpenShift не позволяет нам привязываться к нему; поэтому мы используем порт 8080, который задается переменной окружения ${OPENSHIFT_DIY_PORT}. Мы привязываемся только к нашему внутреннему IP-адресу, и OpenShift перейдет на публичный IP-адрес к порту 80 для нас. Из-за этого вы можете напрямую получить URL http://diy-notyim.rhccloud.com без указания порта. Мы также должны остановить внутреннее приложение DIY командой ctl_app, чтобы освободить порт перед запуском elasticsearch.
Запуск ElasticSearch на OpenShift, привязка к порту 8080 вместо порта 9200

3. Настройка плагина

Загрузите и установите плагин из репозитория WordPress. Извлеките его в папку wp-content/plugins и активируйте его. Или, если вы используете wp-cli, это будет просто.

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

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

Интеграция WordPress

Эта вкладка содержит параметр, разрешающий использование ElasticSearch. Эта вкладка также позволяет нам выбирать, какие категории должны содержаться в ElasticSearch.

Настройки сервера

Настройте сервер ElasticSearch и имя индекса. Имя индекса похоже на имя базы данных в MySQL. В нем есть сервер MySQL и несколько баз данных. Вы можете использовать любое имя там, пока оно используется другой службой.

Если ElasticSearch установлен на одном компьютере и использует настройку по умолчанию, вы можете оставить имя сервера пустым; в противном случае укажите свой URL. Например, если я использовал OpenShift, как описано выше, я бы ввел http://diy-notyim.rhcloud.com/ как URL-адрес сервера.

Индексирование контента

Вы можете выбрать, какие поля типа post, post field или taxonomy будут проиндексированы ElasticSearch. Как только объект индексируется, он будет доступен для поиска через ElasticSearch. Вы можете указать индексы сообщений, страниц, настраиваемых полей или любого настраиваемого типа сообщений в зависимости от ваших потребностей.

Результат

Это важно для сортировки результата. Например, совпадение в заголовке сообщения может считаться более точным, чем совпадение в сообщении. Поэтому мы должны установить меньшее значение для контента поста. Аналогично, если совпадение тегов более ценно, чем совпадение в заголовке, мы установим более высокое значение для post_tag.

Моя оценка баллов, вы должны изменить и принять ее к своим собственным требованиям

Длина префикса

Это относится к количеству символов, которые могут быть заменены для соответствия словам. Например: если я искал Lonux, Linux по-прежнему считается совпадением: L(i)nux-> L(o)nux. Чем меньше число, тем лучше производительность. Не устанавливайте слишком высокое значение. Я думаю, что 0-2 являются самыми разумными.

Управление индексом

Когда все настроено или изменено, пришло время применить это изменение. Когда вы нажимаете повторно индексировать, он должен показывать что-то, как показано ниже:

После завершения индексации. Попробуйте найти что-то на своем сайте, найти фразу, переключить поиск в состояние вкл/выкл по умолчанию и ElasticSearch, чтобы увидеть разницу. Вот мой результат поиска с поиском по умолчанию WordPress:

Нет результата при поиске zsh arch linux со стандартным поиском

Вот результат поиска с помощью ElasticSearch.

Куча сообщений с ElasticSearch

Вывод

Всего лишь несколькими простыми шагами мы создали мощную поисковую систему на нашем сайте. Чем точнее результат поиска, тем лучше для наших посетителей. Если ваш сайт имеет интенсивный трафик, а одна установка ElasticSearch не может обрабатывать поиск, вы можете добавить в ElasticSearch дополнительные узлы для выполнения распределенного поиска.

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

Пожалуйста, оставьте комментарий и сообщите нам, как работает ваш сайт после установки этого плагина.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.