В эпоху больших данных эффективный поиск и анализ информации становятся критически важными для бизнеса и разработки.
Elasticsearch — это поисковый движок на Java, работающий по HTTP-протоколу который позволяет быстро и эффективно обрабатывать огромные объемы данных, предоставляя пользователям возможность находить нужную информацию в считанные секунды.
Эта статья предназначена для тех, кто хочет освоить основы Elasticsearch и научиться использовать его возможности на практике. Мы рассмотрим ключевые концепции, такие как индексы, документы и запросы, а также научимся настраивать окружение и выполнять основные операции. Независимо от того, являетесь ли вы разработчиком, аналитиком или просто хотите расширить свои знания о современных технологиях обработки данных, это руководство поможет вам уверенно шагнуть в мир Elasticsearch. Подготовьтесь к увлекательному путешествию в мир поисковых технологий!
Один из способов использования Elaticsearch — docker файл. Ниже будет прикреплен docker-compose файл для удобства.
Решение возможных проблем с запуском: ограничить потребление ресурсов через опции JVM.
docker-compose
version: "3.8" services: elasticsearch: image: elasticsearch:8.6.2 ports: - "9200:9200" - "9300:9300" environment: - discovery.type=single-node - xpack.security.enabled=false ulimits: memlock: soft: -1 hard: -1 kibana: image: kibana:8.6.1 ports: - "5601:5601"
Способы работы с Elasticsearch:
-
Через терминал, с использованием cURL
-
Использование Kibana
-
Использование Dbeaver/DataGrip для подключения
Индексы
Индекс — хранилище документов с одинаковой схемой данных, задается именем и настройками. Ограничения имен индексов: нижний регистр, отсутствие определенных символов, длина до 255 байт.
Документ — запись в индексе, соответствующая схеме данных.
Схема документа — описание данных в полях, тип данных (например, long для чисел, keyword для текста).
Поиск
Индексирование данных и поиск по индексу — два основных этапа работы поискового движка. Общий алгоритм поиска включает обработку запроса, извлечение данных из индекса, расчет релевантности и ранжирование результатов.
Релевантность документа — оценка соответствия результата поисковому запросу, определяемая используемыми поисковыми алгоритмами.
Фильтрация данных в Elasticsearch: использование классического языка запросов и SQL-синтаксиса. Альтернативный способ использования SQL: функция translate для перевода SQL-запросов в Elasticsearch DSL.
Полнотекстовый поиск
Полнотекстовый поиск важен для улучшения пользовательского опыта, позволяет искать по любому слову или фразе в документе, требует внедрения полнотекстового индекса.
Полнотекстовый индекс состоит из полнотекстовых документов и полнотекстовых полей.
Полнотекстовые документы содержат текст, а полнотекстовые поля содержат информацию о документе.
Bulk-запросы
Bulk-запросы в Elasticsearch позволяют загружать данные пачкой, что ускоряет процесс и снижает нагрузку на сеть и Elasticsearch.
Bulk-запрос состоит из пачки json-объектов, где на нечётных строках повторяется одно и то же, а на последней строке должен стоять символ переноса \n. Elasticsearch возвращает JSON-ответ с информацией о сохранённых документах и возможных ошибках.
Если в процессе сохранения возникли ошибки, можно составить запрос на сохранение с параметром filter_path=items.*.error.
Практика
Блок создания индекса
Создание индекса
PUT favorite_films
Блок внесения данных
Внесение данных с заранее внесенным индексом
POST favorite_films/_doc/1 { "title": "Catch me If you can", "type": "drama", "year": 2001 }
Внесение данных
POST favorite_films/_doc { "title": "EuroTrip", "type": "camedy", "year": 2004 }
Внесение большого количества данных
POST favorite_films/_bulk { "index": { "_id": "2" } } {"title": "The Wolf of Wall Street", "type": "camedy", "year": 2013} { "index": { "_id": "4" } } {"title": "Ted", "type": "camedy", "year": 2012} { "index": { "_id": "5" } } {"title": "Inglourious basterds", "type": ["crime", "drama", "camedy"], "year": 2009} { "index": { "_id": "6" } } {"title": "The Hangover", "type": "camedy", "year": 2009} { "index": { "_id": "7" } } {"title": "The Hangover Part II", "type": "camedy", "year": 2011} { "index": { "_id": "8" } } {"title": "The Hangover Part III"," type": "camedy", "year": 2013}
Блок изменения данных
Обновление данных (старые данные удаляет, поэтому переносить надо и поля)
POST favorite_films/_doc/1 { "title": "Catch me If you can", "type": "drama", "year": 2002 }
Обновление данных без затирания
POST favorite_films/_update/1 { "doc": { "type": ["crime","drama"] } }
Блок получения данных
Получение всей информации
GET favorite_films/_search
Получение информации по id
GET favorite_films/_doc/1
Поиск, где дата выхода фильма от 2002 до 2004
GET favorite_films/_search { "query": { "range": { "year": { "gte": 2002, "lte": 2004 } } } }
Получение всех фильмов, где жанр фильма комедия
GET favorite_films/_search { "query": { "match": { "type":"camedy" } } }
При использовании нескольких слов происходит поиск по одному слову, не все вместе
Запросы одинаковы
GET favorite_films/_search { "query": { "match": { "type":"camedy drama" } } }
GET favorite_films/_search { "query": { "match": { "type": { "query": "drama camedy" } } }
Использование нескольких слов, поиск всех слов вместе
GET favorite_films/_search { "query": { "match": { "type": { "query": "drama camedy", "operator": "and" } } } }
Поиск фразы
GET favorite_films/_search { "query": { "match_phrase": { "title": { "query": "The Hangover Part" } } } }
Поиск по множеству полей
GET favorite_films/_search { "query": { "multi_match": { "query": "The Hangover", "fields": ["title","type"], "type": "phrase" } } }
Поиск с обязательным содержанием фразы и определенного года
GET favorite_films/_search { "query": { "bool": { "must": [ { "match_phrase": { "title": "The Hangover Part" } }, { "match": { "year": 2013 } } ] } } }
Поиск агрегатных значений по определённому названию
GET favorite_films/_search { "query": { "match_phrase": { "title": "The Hangover" } }, "aggs": { "average_year": { "avg": { "field": "year" } } } }
Вывод
Изучение Elasticsearch открывает перед вами широкие горизонты в области обработки и анализа данных. Этот мощный инструмент не только позволяет быстро находить информацию, но и предоставляет гибкие возможности для масштабирования и интеграции с другими системами. Освоив основы работы с индексами, документами и запросами, вы сможете эффективно обрабатывать большие объемы данных и извлекать из них ценную информацию. Мы надеемся, что это руководство стало для вас полезным стартом в мире Elasticsearch. Практика — ключ к мастерству, поэтому не бойтесь экспериментировать с различными функциями и возможностями платформы. В дальнейшем вы сможете углубить свои знания, изучая более сложные темы, такие как настройка кластеров, управление производительностью и реализация сложных поисковых запросов. Удачи в вашем обучении и успешного поиска решений с помощью Elasticsearch!
Рекомендуем прочитать книгу Мэтью Ли Кинмана «Elasticsearch in Action» и посмотреть на youtube курсы от Offical Elastic Community. Ссылка прикреплена
ссылка на оригинал статьи https://habr.com/ru/articles/852038/
Добавить комментарий