Elasticsearchочень мощная поисковая система. В настоящее время он широко используется в различных ИТ-компаниях. Elasticsearch был создан и поддерживается компанией Elastic с открытым исходным кодом. Его открытый исходный код находится по адресуGitHub.com/эластик/голодный…В то же время эластичность также имеетLogstashиKibanaПроект с открытым исходным кодом. Эти три проекта с открытым исходным кодом объединены вELKпрограммный стек. Вместе они втроем образуют сильную экосистему. вообще говоря,Logstash отвечает за сбор данных, обработку (обогащение данных, преобразование данных и т. д.),Kibana отвечает за представление, анализ и управление данными.EElasticsearch находится на основной позиции, он может помочь нам быстро искать и анализировать данные.
Сценарии применения ELK Stack:
Фактически, полный стек Elasticsearch имеет следующее:
Beats — это некоторые из устройств, которые позволяют агенту работать на клиентском сервере. Его не нужно развертывать в нашем эластичном облаке. Это может помочь нам собрать все необходимые события. Если Beats импортированы в мою архитектуру, то стек ELASTIC можно выразить следующим образом:
Процесс сбора данных:
- коллекция битов (Filebeat/Metricbeat) — > Elasticsearch — > Kibana
- коллекция ударов (Filebeat/Metricbeat) —> Logstash —> Elasticsearch —> Kibana
В сегодняшней статье я кратко расскажу, что такоеElasticsearch.
Экология эластичного продукта
Компания Elastic создала множество зрелых решений на базе Elasticsearch. Для получения более подробной информации, пожалуйста, обратитесь к нашему официальному веб-сайтуwww.elastic.co/.
Elasticsearch
Проще говоря, Elaaticsearch — это распределенная поисковая система, использующая интерфейс REST. Его продукцию можно найти вwoohoo.elastic.co/products/horrible…Скачать. Elasticsearch — распределенная поисковая система, разработанная для облака на базе REST-интерфейса, в ее функции входит:
Elasticsearch — этоApache Lucene(TM) с открытым исходным кодом, как в доменах с открытым исходным кодом, так и в проприетарных доменах, Lucene можно считать самой передовой, производительной и полнофункциональной библиотекой поисковых систем на сегодняшний день. Однако Lucene — это всего лишь библиотека. Lucene сама по себе не обеспечивает высокую доступность и распределенное развертывание. Чтобы использовать его возможности, вам нужно использовать Java и интегрировать его в свое приложение. Lucene очень сложен, и вам нужно глубоко понимать поиск, чтобы понять, как он работает.
Elasticsearch также написан с использованием Java и использует Lucene для создания индекса и реализации функции поиска, но его цель — упростить полнотекстовый поиск и скрыть сложность Lucene с помощью простого согласованного RESTful API.
Однако Elasticsearch — это больше, чем просто Lucene и система полнотекстового поиска, он также предлагает:
- Распределенное хранилище файлов в реальном времени, каждое поле индексируется и доступно для поиска
- Распределенная поисковая система для анализа в реальном времени
- Масштабируемость до сотен серверов, обработка петабайт структурированных или неструктурированных данных И все эти функции интегрированы в единый сервер, с которым ваше приложение может взаимодействовать с помощью простых API-интерфейсов RESTful, клиентов на разных языках и даже командной строки. Начать работу с Elasticsearch очень просто, он предоставляет множество разумных значений по умолчанию и скрывает сложную теорию поисковых систем от новичков. Он работает «из коробки» (установка готова к использованию) и может использоваться в производственной среде с минимальным обучением. Elasticsearch распространяется под лицензией Apache 2, и его можно бесплатно загружать, использовать и изменять.
По мере накопления знаний вы можете настраивать расширенные функции Elasticsearch в соответствии с различными предметными областями, все это настраивается, и конфигурация очень гибкая.
Отличительной чертой Elasticsearch является то, что он обеспечивает чрезвычайно быстрый поиск. Это связано с его высокой скоростью (speed). По сравнению с некоторыми другими механизмами работы с большими данными, Elasticsearch может выполнять поиск второго уровня, но для них это может занять несколько часов. Кластер Elasticsearch представляет собой распределенное развертывание, которое чрезвычайно легко масштабировать (scale). Это позволяет легко обрабатывать петабайты емкости базы данных. Самое важное в Elasticsearch то, что его результаты поиска можно сортировать по количеству баллов, что обеспечивает наиболее релевантные результаты поиска (relevance).
Распределенная и высокодоступная поисковая система
- Каждый индекс полностью сегментирован с настраиваемым количеством сегментов.
- Каждый шард может иметь одну или несколько реплик
- Операции чтения/поиска, выполняемые над любым фрагментом копии
мульти аренды
- Поддержка нескольких индексов
- Конфигурация уровня индекса (количество сегментов, хранилище индексов и т. д.)
Различные API
- HTTP RESTful API
- Native Java API
- Все API выполняют автоматическое перенаправление действий узла.
ориентированный на документы
- Нет необходимости определять схему (структура документов) авансом
- Схема может быть определена для настройки процесса индексации.
Надежная асинхронная запись для долгосрочного сохранения
(Близкий) поиск в реальном времени
Построен на Lucene
- Каждый сегмент представляет собой полнофункциональный индекс Lucene.
- Все функции Lucene можно легко открыть с помощью простой конфигурации/плагина.
Согласованность каждой операции
Операции на уровне одного документа являются атомарными, непротиворечивыми, изолированными и надежными.
Руководство по началу работы
Во-первых, не паникуйте. Чтобы получить полное содержимое Elasticsearch, требуется 5 минут.
Предпосылки
Вам необходимо установить последнюю версию Java на своем компьютере (в последней версии Java не нужно устанавливать, потому что установочный пакет Java уже включен в установочный пакет). вы можете просмотретьsetupСсылка для получения дополнительной информации.
Установить
- Вы можете перейти по ссылке Скачать, чтобы загрузить последнюю версию Elasticsearch. Вы можете обратиться к документу «Elastic: руководство для начинающих», чтобы установить Elasticsearch.
- Запустите bin/elasticsearch в Unix/Linux или bin\elasticsearch.bat в Windows.
- запустить curl -X ПОЛУЧИТЬhttp://localhost:9200. Вы можете установить cygwin на Windows для запуска команд curl
- Запуск дополнительных серверов...
Проверьте, правильно ли установлена резинка
На нашем терминале мы можем ввести следующие команды:
$ curl -XGET 'http://localhost:9200/' -H 'Content-Type: application/json'
Если вы видите следующее содержимое, похоже, что наш elasticsearch был установлен правильно:
Позже мы можем установить плагин безопасности, предоставленный Elastic, и сделать это с помощью следующей команды:
$ curl -GET -u "elastic:changeme" 'http://localhost:9200/' -H 'Content-Type: application/json'
Здесь параметр -u может помочь нам установить имя пользователя и пароль для входа в наш elasticsearch. В следующих главах мы опишем, как устанавливать и использовать безопасные плагины.
Индекс (Индекс)
Давайте попробуем что-то похожее на индексную информацию Twitter. Во-первых, давайте проиндексируем количество твитов (твиттер автоматически создаст индекс):
curl -XPUT 'http://localhost:9200/twitter/_doc/1?pretty' -H 'Content-Type: application/json' -d '
{
"user": "kimchy",
"post_date": "2009-11-15T13:12:00",
"message": "Trying out Elasticsearch, so far so good?"
}'
curl -XPUT 'http://localhost:9200/twitter/_doc/2?pretty' -H 'Content-Type: application/json' -d '
{
"user": "kimchy",
"post_date": "2009-11-15T14:12:12",
"message": "Another tweet, will it be indexed?"
}'
curl -XPUT 'http://localhost:9200/twitter/_doc/3?pretty' -H 'Content-Type: application/json' -d '
{
"user": "elastic",
"post_date": "2010-01-15T01:46:38",
"message": "Building the site, should be kewl"
}'
Теперь давайте проверим, была ли указанная выше информация добавлена в индекс с помощью описанной выше операции. Мы можем запросить, получив:
curl -XGET 'http://localhost:9200/twitter/_doc/1?pretty=true'
curl -XGET 'http://localhost:9200/twitter/_doc/2?pretty=true'
curl -XGET 'http://localhost:9200/twitter/_doc/3?pretty=true'
поиск
Давайте найдем все твиты, опубликованные Кимчи:
curl -XGET 'http://localhost:9200/twitter/_search?q=user:kimchy&pretty=true'
Мы также можем использовать язык запросов JSON, предоставляемый Elasticsearch, вместо строк запроса:
curl -XGET 'http://localhost:9200/twitter/_search?pretty=true' -H 'Content-Type: application/json' -d '
{
"query" : {
"match" : { "user": "kimchy" }
}
}'
Приведенный выше запрос отобразит все твиты, опубликованные kimchy. Ради интереса давайте получим все сохраненные документы (мы можем увидеть все твиты, опубликованные пользователем elastic).
curl -XGET 'http://localhost:9200/twitter/_search?pretty=true' -H 'Content-Type: application/json' -d '
{
"query" : {
"match_all" : {}
}
}'
Мы также можем выполнить поиск по диапазону (post_date чуть выше был автоматически распознан как тип даты при индексировании)
curl -XGET 'http://localhost:9200/twitter/_search?pretty=true' -H 'Content-Type: application/json' -d '
{
"query" : {
"range" : {
"post_date" : { "from" : "2009-11-15T13:00:00", "to" : "2009-11-15T14:00:00" }
}
}
}'
Вариантов для поиска стало больше, ведь это поисковый продукт? Все знакомые запросы lucene можно получить с помощью языка запросов JSON или анализатора запросов.
Мультитенантность — индекс и тип
Чувак, этот твиттер-индекс может стать больше (в этом случае размер индекса == оценка). Давайте посмотрим, сможем ли мы немного изменить нашу систему твитов, чтобы поддерживать такой большой объем данных.
Elasticsearch поддерживает несколько индексов. В предыдущем примере мы использовали индекс под названием twitter, в котором хранятся твиты для каждого пользователя.
Другой способ определить нашу простую систему твиттера — создать отдельный индекс для каждого пользователя (обратите внимание, хотя каждый индекс имеет накладные расходы). Вот показатель curl в этом случае:
curl -XPUT 'http://localhost:9200/kimchy/_doc/1?pretty' -H 'Content-Type: application/json' -d '
{
"user": "kimchy",
"post_date": "2009-11-15T13:12:00",
"message": "Trying out Elasticsearch, so far so good?"
}'
curl -XPUT 'http://localhost:9200/kimchy/_doc/2?pretty' -H 'Content-Type: application/json' -d '
{
"user": "kimchy",
"post_date": "2009-11-15T14:12:12",
"message": "Another tweet, will it be indexed?"
}'
Приведенное выше будет индексировать информацию в индексе кимчи. Каждый пользователь получит свой специальный индекс.
Позволяет полностью контролировать уровень индекса. Например, в приведенном выше случае мы могли бы захотеть изменить 1 сегмент по умолчанию с 1 репликой на индекс на 2 сегмента с 1 репликой на индекс (поскольку этот пользователь много твитит). Вот как это сделать (конфигурация также может быть в yaml-файле):
curl -XPUT http://localhost:9200/another_user?pretty -H 'Content-Type: application/json' -d '
{
"settings" : {
"index.number_of_shards" : 2,
"index.number_of_replicas" : 1
}
}'
Поиск (и аналогичные операции) с Multi-index-Aware. Это означает, что мы можем легко найти несколько индекса (пользователей Twitter), например:
curl -XGET 'http://localhost:9200/kimchy,another_user/_search?pretty=true' -H 'Content-Type: application/json' -d '
{
"query" : {
"match_all" : {}
}
}'
Или поиск по всем индексам:
curl -XGET 'http://localhost:9200/_search?pretty=true' -H 'Content-Type: application/json' -d '
{
"query" : {
"match_all" : {}
}
}'
{Тизер одного вкладыша}: Об этой крутой части?
Вы можете легко выполнять поиск по нескольким пользователям Twitter (индекс), у каждого из которых свой уровень повышения (индекс), что делает поиск в социальных сетях еще проще (результаты моего друга ранжируются выше, чем результаты друзей моего друга).
Распределенный и высокодоступный
Elasticsearch — это распределенная поисковая система с высокой доступностью. Каждый индекс разбит на осколки, и у каждого осколка может быть одна или несколько реплик. По умолчанию индекс создается с 1 сегментом и 1 репликой (1/1) на сегмент. Можно использовать множество топологий, в том числе 1/10 (улучшает производительность поиска) или 20/1 (улучшает производительность индексирования).
Чтобы использовать распределенный характер Elasticsearch, просто запустите больше узлов и отключите их. Система продолжит обслуживать запросы на получение последних данных из индекса (убедитесь, что вы используете правильный http-порт).
Где мы начинаем?
Мы только что рассмотрели небольшую часть Elasticsearch. Для получения дополнительной информации см.elastic.coВеб-сайт. Общие вопросы можно найти наelasticна форуме или в#elasticsearchСпросите в IRC на Freenode.Elasticsearch GitHubРепозиторий предназначен только для отчетов об ошибках и запросов функций.
Построить из источника
Elasticsearch используется в качестве системы сборки Gradle.
Чтобы создать дистрибутив, просто запустите сборочную команду ./gradlew в каталоге клонов.
Дистрибутив для каждого проекта будет создан в каталоге build/distributions этого проекта.
См. файл TESTING для получения дополнительной информации о запуске набора тестов Elasticsearch.
Обновление старой версии Elasticsearch
Чтобы обеспечить плавный процесс обновления с более ранних версий Elasticsearch, обратитесь к нашей документации по обновлению для получения более подробной информации о процессе обновления.
Следующий шаг
Если вы действительно хотите использовать Elastic Kibana для операций с индексами, обратитесь к моей статье: