В эпоху больших данных эффективный поиск и анализ информации становятся критически важными для бизнеса и разработки.
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. Ссылка прикреплена
grosman_s_a
Полезная статья, вся база на месте, хорошая структура, спасибо!
PB_Academy Автор
Спасибо за мнение. Старались