Управление Данных с Elasticsearch: Обучение и Практика

от автора

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

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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *