Elasticsearch как создать поисковую систему

E

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

Вкратце, существующая система должна выполнять полнотекстовый поиск по названию отеля и города в различных языковых вариациях, а также выполнять типичное точное совпадение по количеству звезд, рейтингу, возрасту. Также есть фильтр по географическому расстоянию и возможность поиска по услугам. Кроме того, у каждого отеля есть комментарии и бронирования, данные по которым также доступны для поиска. Система поиска отелей должна удовлетворять всем указанным требованиям. Она также должна быть супер быстрой. Но это не все проблемы, которые у нас есть. Есть и дополнительные требования. Давайте исследуем все по порядку. В первую очередь система должна позволять осуществлять поиск отелей в произвольной геометрической форме, заданной пользователем. Вот пример пользовательского интерфейса:

Во-вторых, мы должны отобразить количество отелей на карте, как показано на изображении ниже:

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

где X — месяцы года, а Y — количество комментариев.

Будучи ответственным за создания такой системы, легко потерять голову. Как спроектировать такую систему, как выполнить все эти требования? Всегда сложно выбрать нужный инструмент, особенно в наше время, когда у нас такое большое разнообразие технологий в сфере ИТ. А вот если бы мне пришлось создавать такую систему — сомнений у меня не было вообще. Во-первых, мы должны обеспечить операции полнотекстового поиска, во-вторых, нам нужно выполнить некоторые сложные гео-операции. Кроме того, у нас есть аналитика. И все это должно работать сразу и с высокой скоростью. Я знаю единственный инструмент, который идеально соответствует всем этим требованиям.

И это Elasticsearch. Я покажу Вам, что мы можем легко получить все эти вещи всего за несколько запросов. И я сомневаюсь, что любая подобная система, построенная с использованием реляционных баз данных (например, mysql, postgres или oracle), сможет составить в этом случае хорошую конкуренцию ElasticSearch. Либо Вы закончите со сверхсложной архитектурой, либо это будет просто медленно.. Ознакомиться с требованиями можно также в текущем видео, которое является первым в моем курсе udemy, посвященном ElasticSearch -> раздел «Расширенная поисковая система». Вы можете просмотреть весь курс на udemy по следующей ссылке со скидкой:


Похожие статьи, которые могут вас заинтересовать: Как создать рекомендательную систему с помощью ElasticSearch

About the author

sergii-demianchuk

Software engineer with over 18 year’s experience. Everyday stack: PHP, Python, Java, Javascript, Symfony, Flask, Spring, Vue, Docker, AWS Cloud, Machine Learning, Ansible, Terraform, Jenkins, MariaDB, MySQL, Mongo, Redis, ElasticSeach

архитектура гео докер кластер поиск поисковые системы рекомендательные системы фреймворк-flask фреймворк-spring-boot фреймворк-symfony язык-java язык-php язык-python языки программирования