Поднять ElasticSearch, натянуть Elastica и вставить данные. Часть 1.

Поисковый движок elasticsearch – это автократическая обертка над Lucene. Движок способен работать из коробки, не требуя к себе каких-либо предварительных ласк. Модная штучка для любителей похвастаться современным поиском, по семантической мощности напоминающего крупные поисковые движки. Обо всех плюсах elasticsearch интересующиеся могут узнать из официального сайта или из бложика какого-нибудь сумасшедшего фанатика. 

elasticsearch logo drugs

Несомненно, elasticsearch становится очень популярным движком. На сайте можно найти подробное описание элементарных запросов и.. на этом официальная документация превращается в сухой справочник без примеров, с которым очень тяжело взаимодействовать. Всё потому что, самый морс авторы оставили для своих платных лекций. Хитро, хитро: поманив отличными скоростными показателями и легкостью установки и элементарными elasticsearch-примерами запросов, создатели ловко вынуждают ходить на их платные семинары. 🙂 В Интернетах очень мало статьей по “Упругому поиску”. Как один из вариантов обучения – это читать unit-тесты автора elastica. Elatica – это php клиент Для elasticsearch https://github.com/ruflin/Elastica/tree/master/test

За последний год наблюдается модная тенденция использовать эластиксёрч как обертку над реляционной баз данных. Наберитесь терпения, сейчас автор попытается всё объяснить. Всё же, наше время – это время когда веб-разработчики стали возвращаться в эпоху NoSQL. Ведь, динамически формируемая модель данных лучше себя проявляет в постоянно меняющемся техническом задании. Однако, разработчики не стесняются попасть в просак, по привычке используя реляционные базы данных в роли документоориентированных. Данный изврат формируется при помощи популярного паттерна  Entity-Attribute-Value Table Design

После многоэтапной оптимизации базы данных или при вертикальном расширении оборудования администраторы соединяют указательный палец с большим и ладонью другой руки ударяют по этому кольцу, таким образом намекая, что скоростные характеристики реляционки всё больше провоцируют послать клиенту 504 ошибку. И здесь, к нам на помощь, как второй эшелон оптимизации скорости получения данных от севера после nginx-cache, приходит elasticsearch. Наш антагонист просто индексирует вcю реляционку, перегоняя данные сразу в документо-ориентированный вид (грубо говоря документы сохраняются в JSON).

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

Установка WAMP

Дорогие читатели спросят, зачем же использовать Windows в для построения такого веб-сервиса? Могу парировать тем, что использую Windows из-за красивых обоев и присутствием большого количества антивирусных программ. В отличии от этого вашего Linux.

Подробно опишу процесс установки всех сервисов, так как некоторые читатели любят делать всё “строго по инструкции”, в точности так как написано в статье.

В первую очередь необходимо установить сборку WAMP, содержащую apache, mysql, php. Почему возникает необходимость использовать WAMP :

  • Установлена ОС Windows.
  • Устанавливать linux-подобные системы нет времени, желания, возможности. Например читателю не удобно добавить в боевой жесткий диск еще один раздел ex3
  • Нет желания устанавливать virtualbox с linux-подобной системой на борту. Потребуется настройка всей связки веб-сервисов; настройка доступа к www-папкам через Sumba И настройка ssh доступа.
  • Нужен низкий порог вхождения в эксперимент. Увидев интересную статью, читатель захочет поскорее пощупать увиденное, а ведь, как назло под рукой может не оказаться настроенной связки Apache+PHP+Mysql .

Как вы догадываетесь, установка WAMP проста и незамысловата. Итак, после запуска установочного файла:

Установка WAMP

Установка WAMP

Пробегаемся по всем шагам установки, соглашаясь на все предложенные настройки. Автор указал наиболее удобный путь хранения WAMP-сборки: c:\developing\wamp5

После установки WAMP должен запуститься самостоятельно.

Значек сервиса WAMP в виде зеленой W

Значок сервиса WAMP в виде зеленой W

Если значок WAMP в трее не отображается, то переходим в корневую директорию с WAMP и запускаем “wampmanager.exe” вручную.

Об успешном запуске WAMP сообщит при помощи зеленой буквы “W” в трее. Если “W” красная – то попробуйте выключить skype или поменять в нем порты.

Чтобы удостовериться, что WAMP запущен, в адресной строке браузера введите http://localhost/. Должна открыться страница с информацией о WAMP-сервере.

И так, WAMP запустил все сервисы? Отлично! Теперь переходим к установке elasticsearch.

Установка elasticsearch

Скачиваем с официального сайта elasticsearch последнюю версию поискового движка:   Elasticsearch.org Download _ Elasticsearch - Google Chrome 2014-07-22 16.38.17

Архив распаковываем в любую дирректорию. К примеру, можно распаковать в C:\Developing\wamp5\apps\

Как говорилось выше, запуск движка elasticsearch не требует длительной подготовки. То есть, движок прекрасно подходит для любителей методологии разработки проектов “хоп, хоп, в продакшин”.

Итак, нам остается все-го лишь запустить движок: из корневой папки с эластиком попадаем в папку bin и запускаем elasticsearch.bat. Должен появиться терминал с информацией о запущенном процессе эластиксёрча. 2 Проверим, доступен ли сервер эластиксёрча через протокол http. Для этого необходимо  в адресной строке браузера ввести путь до порта, на котором запущен эластик: http://127.0.0.1:9200/

На выходе получаем: 127.0.0.1_9200 - Google Chrome 2014-06-18 02.00.39 Отлично! Сервис Эластиксёрч готов к работе!

Теперь нужно попробовать записать документы в индекс эластика, а затем выполнить наш первый полнотекстовый поиск!

Для контроля за сервисом эластиксёрча, просмотра коллекций и выполнения запросов можно воспользоваться каким-нибудь веб-интерфейсом для администрирования. Автор обычно пользуется elasticsearch-head

Установка Head

Для установки head можно воспользоваться встроенным в  elasticsearch инструментом по установке плагинов. Для этого перейдем в директорию elasticsearch / bin. Затем,  выполним программу plugin с нужными параметрами. Для этого открываем консоль CMD и переходим в папку Bin. Для того, чтобы CMD открылась сразу с нужными путями, то в папке bin зажимаем SHIFT и правую кнопку мыши на пустом месте недалеко от всех файлов. В контекстном меню  выбираем “открыть окно команд”.
Безымянный - Paint 2014-06-18 23.27.41 В открывшейся консоли набираем elasticsearch/bin/plugin -install mobz/elasticsearch-head Готово! C__Windows_system32_cmd.exe 2014-06-18 23.37.33 Перезапустим эластик.

Теперь, проверим работоспособность установленного плагина. Для этого при помощи браузера открываем веб-приложение по адресу http://localhost:9200/_plugin/head/ elasticsearch-head - Google Chrome 2014-06-19 00.27.39

Ввод данных в индекс поискового движка.

Чтобы осуществить полнотекстовый поиск по коллекции, необходимо, чтобы коллекция хранилась в индексе эластиксёрча. Если провести аналогию в реляционками, то Индекс в эластиксёрче – это как База данных в реляцонке.

В индексе могут храниться Type (это что-то вроде таблиц в реляционке), а в Type хранится коллекция документов (это row и column в реляционке).

В качестве примера работы с elasticsearch попробуем поработать с данными, которые мы добавим в индекс.

Создадим новый индекс. Перейдем во вкладку “Indicies” и в появившемся окне нажимаем на кнопку “New Index” elasticsearch-head - Google Chrome 2014-06-19 00.41.06

Назовем новый индекс erection (сооружение), все остальные параметры оставим без изменений. Теперь нам нужно заполнить новый индекс какими-то данными, которые будут атакованы поисковыми запросами. Перейдем во вкладку “Any Request“, Где перед нами предстанет панель управления REST-знапросами elasticsearch-head - Google Chrome 2014-06-19 00.47.33 Для создания первого документа все поля необходимо заполнить следующим образом:

  • адрес elasticsearch : http://localhost:9200/
  • параметры запроса: /erection/shop/1
  • тип запроса: POST
  • тело запроса: { “name”: “Bagira”, “address”: “lenina str., 25”, “goods_type”: “food”

Нажимаем “Request

При удачном стечении обстоятельств мы с вами получим следующий ответ:

{
_index: erection
_type: shop
_id: 1
_version: 1
created: true
}

Отлично! Первый документ успешно был добавлен в коллекцию erection.

Теперь добавим еще два магазина:

{“name”:”Suzi Market”,”address”:”lenina str., 12″,”goods_.type”:”food”}

{“name”:”F&K”,”address”:”jinina str., 55″,”goods_type”:”clothe”}

В итоге, мы добавили три документа с описанием магазина в индекс “Сооружение”. Чтобы посмотреть коллекцию с добавленными документами, перезагрузите страницу и перейдите во вкладку “Browser

elasticsearch-head - Google Chrome 2014-07-20 20.22.43

Мой первый полнотекстовый поиск

Данные заполнены и теперь настало время осуществить запрос на поиск заведения по ключевому слову.

Попробуем найти магазин “Slata” в индексе.

В закладке “any request” напишем следующие параметры:

_search?q=Slata

elasticsearch-head - Google Chrome 2014-07-21 03.47.23

В ответ эластик вернёт список документов, у которых в любом из полей содержится слово “Slata

Чтобы искать текст только в определенном поле, то перед ключевым словом нужно добавить двоеточие и написать название поля. К примеру, мы ищем, чтобы в названии заведения присутствовала буква S:

elasticsearch-head - Google Chrome 2014-07-21 03.52.26

Как видно, в результате, elasticsearch нашел два докумнета, у которых в названии магазинов содержится  “S“.
Внимательный читатель заметит, что чтобы эластик искал не по слову целиком, а по символам, используется знак звездочки.

Итак в первой части статьи мы с вами научились устанавливать WAMP, север движка ElasticSearch и веб-клиент HEAD. Разобрали веб-интерфейс elasticsearch-head. Научились добавлять документы в индекс elasticsearch. И наконец составили первый запрос на полнотекстовый поиск.

В следующей части мы поработаем над настройкой маппинга в поисковом движке и рассмотрим php модуль elastica.

7 thoughts on “Поднять ElasticSearch, натянуть Elastica и вставить данные. Часть 1.

  1. Рус

    Кросавчег! Все понятно. Хотелось бы продолжения с более сложными вариантами поиска/фильтрации

    Reply
    1. tomclancyya Post author

      Спасибо! Я временно ушел во FrontEnd, поэтому выпуск следующей части немного затягивается.

      Reply
  2. GrayAnt

    непонятно зачем было ставить WAMP когда elastic и без него работает или версия 1.2.0 не включала в сборку сервер?

    Reply
    1. tomclancyya Post author

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

      Reply
  3. Ruslan

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

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *