Блог - Elastic Search

Elastic Search, быстрый старт

На текущем проекте используем Elastic Search. Elastic представляет собой движок для продвинутого поиска по документам. Основан на Apache Solr. По сути, является NoSQL хранилищем, и некоторые даже используют его, как отдельную БД.

За время работы нашлось несколько вещей, которые не сразу удалось настроить. Информации в сети много, но местами она не очень структурирована, либо есть различия для разных версий. Либо просто сразу не удается найти нужный материал. В результате пришлось перелопатить весь интернет, прежде чем все заработало как требовалось.

Это первая статья из цикла. Здесь все тривиально, речь пойдет о базовых настройках Elastic Search.

Elastic Search, Настройка синонимов

Это вторая статья из цикла про Elastic Search. Речь пойдет о настройках синонимов Elastic Search. Синонимы нужны в том случае, если у нас есть несколько слов, которые морфологически не похожи друг на друга, но при этом имеют сходное значение. Или это может быть профессиональный жаргон. Примеры: Углошлифовальная машина - болгарка, Отвертка - шуруповерт и т.д.

Стартовая проверка

Все настройки проводились на Elastic Search 6.1.2. Запускалось в Docker.

Elastic Search, Русская морфология

Это третья статья из цикла про Elastic Search. Речь пойдет о настройке русской морфологии Elastic Search. Настройка морфологии происходит путем добавлления в elastic search специальных анализаторов. Анализаторы учитывают особенности языка и за счет этого улучшаются результаты поиска.

Интеграция Magento 2 и Elastic Search

В нашем проекте DIY price мы используем Magento 2 в качестве ecommerce движка. Сначала пытались делать проект полностью на magento но в итоге пришли к headless режиму. Frontend написан на VueJS, отделен от magento и взаимодействует с ней по Rest API. Такой подход приносит определенные сложности - многое нужно продумывать самому, нехватает некоторых методов api и т.д. В то же время упрощает работу frontend разработчиков, дает больше гибкости. Настраивать тему magento под свои нужды иногда может быть непростирой задачей. В конечном итоге headless архитектура оправдывает себя.

В качестве поискового движка планировали использовать Elastic Search. Причем в нашем случае мы можем даже обращаться к нему напрямую, тем самым разгружая magento. К тому же мы используем Magento Enterprice и его поддержка заявлена из коробки. Правда начинали мы разработку на Comunity Edition и искали возможности интеграции уже в этот момент.

Настройка базовой авторизации Elastic Search

Иногда в процессе работы с elastic search может возникнуть необходимость ограничить доступ к нему. По умолчанию никакой защиты не настроено. Соответственно, кто угодно может смотреть ваши данные в elastic. Впринципе это не так и страшно, т.к. elastic все-таки поисковый движок. И данные для поиска могут быть доступны и не являются приватными.

Но в то же время, elastic доступен всем так же и на запись. Таким образом злоумышеник может удалить все индексы или подменить данные в них. Поэтому оставлять elastic открытым нельзя. Рекомендуется настроить firewall и ограничить доступ для определенных ip адресов или подсетей. Также можно настроить базовую авторизацию по логину и паролю.

Elastic в базовой версии такой функционал не поддерживает. Настройки безопасности реализованы в рамках платного дополнения x-pack.

Мы же настроим авторизацию с помощью web-сервера nginx.

Примеры использования Elastic Search

Всем привет! Недавно сделал демонстрационный проект, который содержит основные наработки по Elastic Search. Реализовал примеры функционала, который был сделан в рамках последних проектов.

В демонстрационном проекте есть примеры обычного и нечеткого поиска, фильтрации, агрегации, поиска с синонимами, динамического обновления настроек индекса, подсветки поисковых запросов, поиска с учетом руской морфологии, поиска с учетом стоп-слов и поисковых подсказкок. Также есть примеры поиска по документам(PDF, DOC, XLS и т.д.) с помощью ingest плагина.

Elastic Search - тестирование релевантности

Всем привет! Сегодня поговорим об отладке и тестировании поиска на базе Elastic Search. Конкретно, о тестировании релевантности. Из коробки Elastic работает неплохо. Но, вероятно, может понадобится донастроить релевантность поиска. Например, установить вес различных полей в поиске. Также могут быть другие факторы, влияющие на релевантность. Подробнее про настройку и о том как все устроено можно почитать тут: https://codedzen.ru/elasticsearch-urok-6-4-relevantnost/

При этом важно понимать, что изменения настроек влияют на весь поиск. К примеру, нам не нравится результаты поиска по запросу "Fiat 500", но при этом устраивают результаты по запросам "Renault Logan", "Nissan Micra" и т.д. Если мы поменяем настройки и подгоним результаты под запрос "Fiat 500", то не факт, что все остальное будет работать нормально.