Что такое Elastic Stack и Elasticsearch?

Опубликовано: 5 Июня, 2021

Elastic Stack - это группа продуктов, которые могут надежно и безопасно получать данные из любого источника в любом формате, а затем искать, анализировать и визуализировать их в режиме реального времени. Elasticsearch - это распределенная система поиска и аналитики RESTful, которая может решать огромное количество вариантов использования. Также считается сердцем Elastic Stack, он централизованно хранит пользовательские данные для высокоэффективного поиска, отличной релевантности и мощной аналитики с высокой степенью масштабируемости.

Основные продукты Elastic Stack

Основные продукты, которые определяют эластичный стек, перечислены ниже:

  • Elastic Search - поисковая и аналитическая система.
  • Logstash - конвейер обработки данных.
  • Kibana - панель для визуализации данных.

Все эти три имеют собственное значение, и, объединив эти три, вы получите анализ и аналитику своих данных.

Зачем это нужно?

Согласно опросу, Facebook генерирует 4 петабайта данных каждый день, то есть 40 миллионов ГБ. Данные, теперь это мир данных. Итак, нам нужна система, которая анализирует наши данные. Следует понимать два термина:

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

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

Проблемы и решения:

  • Что происходит в очень крупных компаниях, вы получаете данные из разных мест в разных форматах. Это может быть JSON или XML, что угодно. Итак, нам нужен один механизм для получения всех данных в одном месте и в одном формате. Для этого мы используем Logstash.
  • Теперь, когда мы получаем данные, нам нужно упорядочить данные в систематическом порядке, чтобы мы могли очень легко их оценивать. Кроме того, мы хотим проанализировать данные, в этом случае, во-первых, обработать данные очень быстро. Для этого у нас есть Elasticsearch. Elasticsearch разработан на Java и выпускается с открытым исходным кодом в соответствии с условиями лицензии Apache.
  • После этого нам понадобится платформа визуализации, на которой мы сможем показать нашу аналитику данных. Здесь появляется Кибана. Так работал весь стек Elastic. Для лучшего понимания бизнеса.

Настройка Elasticsearch, Logstash и Kibana

Сначала загрузим три ПО с открытым исходным кодом по соответствующим ссылкам [elasticsearch], [logstash] и [kibana]. Разархивируйте файлы и поместите все три в папку проекта. Сначала настройте Kibana и Elasticsearch в локальной системе. Мы запускаем Kibana с помощью следующей команды в папке bin Kibana.

  • бин кибана

Точно так же Elasticsearch настроен так:

 bin  elasticsearch

Теперь в двух отдельных терминалах мы видим, что оба модуля работают. Чтобы проверить, работают ли службы, откройте localhost: 5621 для Kibana и localhost: 9600 для Elasticsearch.

Здесь мы готовы к настройке эластичного стека. Теперь перейдите на localhost: 5621 и откройте инструменты разработчика здесь, в консоли. Это место, где вы можете писать запросы Elasticsearch. Поскольку на этот раз мы поговорим подробнее об Elasticsearch. Теперь посмотрим, как именно работает Elasticsearch.

Работа эластичного поиска

Перед любой операцией мы должны проиндексировать наши данные. После индексации в Elasticsearch пользователи могут выполнять сложные запросы к своим данным и использовать агрегаты для получения сложных сводок своих данных. Elasticsearch хранит данные в виде документов JSON и использует структуру данных, называемую инвертированным индексом, которая предназначена для очень быстрого полнотекстового поиска. Инвертированный индекс перечисляет каждое уникальное слово, которое встречается в любом документе, и идентифицирует все документы, в которых встречается каждое слово. Для лучшего понимания мы разделим Elasticsearch на несколько тем.

  • Управление документами
  • Сопоставления
  • Анализ
  • Методология поиска
  • Агрегация и фильтры

Архитектура эластичного поиска:

  • Кластер: в Elasticserach мы храним наши данные в узлах, на машине может быть n узлов. И каждый узел связан с кластером. Итак, кластер - это набор узлов.
  • Документы: вы храните свои данные в виде документов, которые являются объектами JSON. Итак, как эти данные организованы в кластере? Ответ - индексы. В мире реляционных баз данных документы можно сравнить со строкой в таблице.
  • Индекс: индексы Elasticsearch - это логические разделы документов, которые можно сравнить с базой данных в мире реляционных баз данных.
  • Типы: каждый индекс имеет один или несколько типов сопоставления, которые используются для разделения документов на логическую группу. Его можно сравнить с таблицей в мире реляционных баз данных.
    Каждый документ хранится в виде индекса. Индекс, который можно назвать сборником документов. Это имеет аналогичные характеристики, например, у отдела будет индекс A, а у сотрудников - индекс B, то есть они логически связаны.
  • Шардинг
    а) Шардинг - это просто способ разделить индекс на более мелкие части.
    б) Каждая часть называется осколком.
    c) Шардинг выполняется на уровне индекса.
    Shard похож на индекс. Для масштабируемости. С помощью сегментирования вы можете хранить миллиарды документов в одном индексе. Также есть реплики, но на данный момент нам достаточно, чтобы начать и понять Elasticsearch. Итак, давайте двигаться дальше в сторону создания и поисковой системы.

1. Управление документами

Перед этим получите менеджер пакетов Elasticserach.

npm -i elasticsearch 

Шаг 1. Свяжите свое приложение с Elasticsearch, выполнив следующие действия.

javascript




var elasticsearch = require( 'elasticsearch' );
var client = new elasticsearch.Client({
host: 'localhost:9200' ,
log: 'trace' ,
// use the same version
// of your Elasticsearch instance
apiVersion: '7.2' ,
});
module.exports = client;

Шаг 2: Создайте индекс, например, мы создаем индекс как gov.

javascript




// Write Javascript code here
var client = require( './connection.js' );
client.indices.create({
index: 'gov'
}, function (err,resp,status) {
if (err) {
console.log(err);
}
else {
console.log( "create" ,resp);
}
});

Шаг 3: Теперь мы добавим документы в index gov, а в index gov есть тип, называемый избирательными округами. Вы можете относиться к ним, так как есть база данных под названием gov, а таблица - это округа.

javascript




// Write Javascript code here
var client = require( './connection.js' );
client.index({
index: 'gov' ,
id: '1' ,
type: 'constituencies' ,
body: {
"ConstituencyName" : "Ipswich" ,
"ConstituencyID" : "E14000761" ,
"ConstituencyType" : "Borough" ,
"Electorate" : 74499,
"ValidVotes" : 48694,
}
}, function (err,resp,status) {
console.log(resp);
});

2. Сопоставления

Сопоставление - это процесс определения документа и его полей. Точно так же, как определение схемы таблицы в СУБД.

Шаг 4: Теперь мы определим сопоставления для индексации округов типа gov.

javascript




var client = require( './connection.js' );
<code>client.indices.putMapping({
index: 'gov' ,
type: 'constituencies' ,
body: {
properties: {
'constituencyname' : {
// type is a required
// attribute if index
// is specified
'type' : 'string' ,
'index' : false
},
'electorate' : {
'type' : 'integer'
},
'validvotes' : {
'type' : 'integer'
}
}
}
}, function (err,resp,status){
if (err) {
console.log(err);
}
else {
console.log(resp);
}
});

3. Анализ

Анализ текста - это процесс преобразования неструктурированного текста, такого как тело электронного письма или описание продукта, в структурированный формат, оптимизированный для поиска. Elasticsearch выполняет анализ текста при индексировании или поиске текстовых полей. Это мы определили в отображениях. Это ключевой фактор для поисковой системы.
По умолчанию Elasticsearch использует стандартный анализатор для всего анализа текста. Стандартный анализатор предоставляет готовую поддержку для большинства естественных языков и вариантов использования. Если вы решите использовать стандартный анализатор как есть, дальнейшая настройка не требуется. Вы также можете создать свой собственный анализатор.

4. Методология поиска

Есть разные типы запросов, которые вы можете применять к Elasticsearch. Таким образом, вы получите соответствующие результаты. Здесь я приведу простой пример запроса. Самый простой запрос, который соответствует всем документам.

javascript




// Write Javascript code here
var client = require( './connection.js' );
client.search({
index: 'gov' ,
type: 'constituencies' ,
body: {
query: {
match: { "constituencyname" : "Harwich" }
},
}
}, function (error, response,status) {
if (error){
console.log( "search error: " +error)
}
else {
console.log( "--- Response ---" );
console.log(response);
console.log( "--- Hits ---" );
response.hits.hits.forEach( function (hit){
console.log(hit);
})
}
});
client.search({
index: 'gov' ,
type: 'petitions' ,
body: {
query: {
match: { 'action' : 'Ipswich' }
},
}, function (error, response,status) {
if (error){
console.log( "search error: " +error)
}
else {
console.log( "--- Response ---" );
console.log(response);
console.log( "--- Hits ---" );
response.hits.hits.forEach( function (hit){
console.log(hit);
})
}
});

5. Запросы

  • Составные запросы: составные запросы охватывают другие составные или листовые запросы, чтобы объединить их результаты и оценки, изменить их поведение или переключиться с запроса на контекст фильтрации.
    Запрос по умолчанию для объединения нескольких предложений конечных или составных запросов, как must, should, must_not или filter. Очки за обязательные и обязательные пункты суммируются.
  • Полнотекстовые запросы . Полнотекстовые запросы позволяют выполнять поиск в проанализированных текстовых полях, например в теле письма. Строка запроса обрабатывается тем же анализатором, который применялся к полю при индексировании. Он проанализирует ваш вклад. Если введенные данные не точны, но все же, вы получите результат.
  • Объединение запросов: выполнение полных объединений в стиле SQL в распределенной системе, такой как Elasticsearch, непомерно дорого. Вместо этого Elasticsearch предлагает две формы соединения, которые предназначены для горизонтального масштабирования.
    а) вложенный запрос
    б) запросы has_child и has_parent
  • Специализированные запросы: эта группа содержит запросы, которые не вписываются в другие группы. Было обнаружено, что документы, которые похожи по своей природе, закрепленных запросов также существует гораздо больше, пожалуйста, ознакомьтесь с его документацией.
  • Запросы на уровне терминов: вы можете использовать запросы на уровне терминов для поиска документов на основе точных значений в структурированных данных. Примеры структурированных данных включают диапазоны дат, IP-адреса, цены или идентификаторы продуктов.
    В отличие от полнотекстовых запросов, запросы на уровне терминов не анализируют условия поиска. Вместо этого запросы на уровне терминов соответствуют точным терминам, хранящимся в поле. Он найдет точное совпадение ввода, тогда как в полнотекстовом сначала он будет проанализирован, а затем произведен поиск, так что это большая разница между запросом на уровне термина и полнотекстовым запросом.

6. Агрегация и фильтры

В контексте фильтра предложение запроса отвечает на вопрос «Соответствует ли этот документ этому предложению запроса?» Ответ простой: да или нет - баллы не подсчитываются. Контекст фильтра в основном используется для фильтрации структурированных данных, например

  • Попадает ли эта временная метка в диапазон с 2015 по 2016 год?
  • В поле статуса установлено значение «опубликовано»?

Часто используемые фильтры будут автоматически кэшироваться Elasticsearch для повышения производительности. Контекст фильтра действует всякий раз, когда предложение запроса передается параметру фильтра, например параметрам filter или must_not в запросе bool, параметру фильтра в запросе constant_score или агрегированию фильтров. Агрегирование больше похоже на то, как в РСУБД, вы найдете Avg, Sum и множество аналитических данных, используя сложные запросы.

Elastic Stack - очень важная технология, которую нужно изучить. Вы примените это в любом из своих проектов, а ELK Stack чаще всего используется в качестве инструмента анализа журналов. Его популярность заключается в том, что он обеспечивает надежный и относительно масштабируемый способ агрегирования данных из нескольких источников, многое еще остается, но после этого вы можете начать с Elasticsearch.