предисловие
Elasticsearch
Для простого введения, пожалуйста, обратитесь к статье, написанной ранееПростое введение в Elasticsearch, это краткое введениеElasticsearch
базовая установка,Docker
Метод установки, основные понятия и способы использованияJava
код для реализацииElasticsearch
изCRUD
Эксплуатация и другие вводные знания.
Аннотация
1.1 Сценарий применения эластичного стека
- Поиск по веб-сайту, поиск по коду и т. д. (например, сбор журналов в производственной среде — анализ форматирования — полнотекстовый поиск — системное предупреждение)
- Управление и анализ журналов, анализ производительности системы приложений, мониторинг индикаторов безопасности и т. д.
1.2.Техническая архитектура эластичного стека
Упругое статическое семейство продуктов
Расширенная архитектура
Elastic
Техническая архитектура может быть простой или расширенной, она очень расширяема, самая простая техническая архитектура заключается в использованииBeats
для сбора данных,Beats
Это абстрактное имя, и можно использовать конкретноеFileBeat
Собирайте данные из файлов или используйтеTopBeat
Для сбора информации мониторинга в системе можно сказать, что что-то вродеLinux
в системеTOP
команды и, конечно же, многое другоеBeats
конкретная реализация, затем используйтеlogstash
Конвертировать и импортировать данные вElasticsearch
в последнем использованииKibana
Выполнение таких операций, как манипулирование данными и визуализация данных.
Конечно, в производственной среде наши данные могут находиться в разных местах, например в реляционной базе данных.Postgre
,илиMQ
, илиRedis
, мы можем единообразно использоватьLogstash
Преобразуйте данные, и в то же время вы также можете преобразовать данные в соответствии с количеством данных.ES
Кластерная архитектура представляет собойгорячий и холодныйархитектура с использованиемES
Многоузловые данные в течение одного дня называются горячими данными, которые часто считываются и записываются и хранятся вES
изгорячий узел, данные в течение семи дней называютсяданные температуры, то есть иногда используемые данные хранятся втеплый узел, хранить очень мало данных, которые будут использоваться вв холодном узле.
1.3.Обзор основных понятий ЭС
Документ
Elasticsearch
Ориентированный на документ, документ является наименьшей единицей всех доступных для поиска данных. Например,PDF
, содержание фильма, песни и т. д., документ будет сериализован вJSON
формат, сохранить вElasticsearch
, необходимо, чтобы каждый документ имел свой уникальный идентификатор, который может быть указан сам по себе илиElasticsearch
помогите сгенерировать. Ряд данных, как база данных.
Метаданные (аннотированная информация о документе)
"_index" : "user",
"_type" : "_doc",
"_id" : "l0D6UmwBn8Enzbv1XLz0",
"_score" : 1.6943597,
"_source" : {
"user" : "mj",
"sex" : "男",
"age" : "18"
}
-
_index
: имя индекса, которому принадлежит документ. -
_type
: Имя типа, которому принадлежит документ. -
_id
: уникальный идентификатор документа. -
_version
: Информация о версии документа. -
_score
: оценка релевантности документа. -
_source
: оригинал документаJSON
содержание.
показатель
показательЭто контейнер документов, набор документов, похожий на таблицу в реляционной базе данных.Индекс отражает концепцию логического пространства, и каждый индекс должен иметь свой собственныйMapping
Определение для определения имени поля и типа поля, содержащего документ. вShard
(Sharding) отражает концепцию физического пространства, то есть данные в индексе хранятся вShard
Выше, потому что есть кластер, необходимо обеспечить высотное использование.При сбое одной из машин данные шарда, сохраненные на ней, также могут быть доступны в обычном режиме.Поэтому естьОсколочная копия.
показательЕсть два важных понятия вMapping
иSetting
.Mapping
Определяет поля документа и типы полей,Setting
Что определено, так это различные распределения данных.
Тип
- До версии 7.0
index
Можно создать несколькоType
. тогда только одинindex
соответствует одномуType
.
Узел
Узел — этоElaseticsearch
экземпляр, который по сути являетсяJAVA
процесс. После запуска каждого узла по умолчаниюmaster eligible
узел. способен статьmaster
Квалифицированный узел, так же можно жестоко указать, что он не имеет этой квалификации (node.master:false
),
После запуска первого узла он выбирает себя в качествеMaster
Node, состояние кластера сохраняется на каждом узле, но толькоMaster
для изменения информации о состоянии кластера. Информация о состоянии кластера, такая как:
- Вся информация об узле.
- Вся информация индекса, соответствующий индекс
mapping
информация иsetting
Информация. - Информация о маршрутизации фрагментов.
осколок
- Первичный шард: используется для решения проблемы горизонтального расширения данных.Через первичный шард данные распределяются по разным узлам в кластере.Первичный шард указывается при создании индекса, и его нельзя изменен позже, если только он не будет переопределен.
Index
. - Реплика: используется для решения проблемы высокой доступности, шард является копией основного шарда. Количество сегментов реплик можно регулировать динамически, а увеличение количества реплик может в определенной степени повысить доступность службы. Понимание основного сегмента можно увидеть на следующем рисунке, чтобы увидеть, как добиться высокой доступности,
"settings" : {
"index" : {
// 设置主分片数
"number_of_shards" : "1",
"auto_expand_replicas" : "0-1",
"provided_name" : "kibana_sample_data_logs",
"creation_date" : "1564753951554",
// 设置副本分片数
"number_of_replicas" : "1",
"uuid" : "VVMLRyw6TZeSfUvvLNYXEw",
"version" : {
"created" : "7010099"
}
}
}
1.4. Перевернутый индекс
положительный индекс: это документID
Коротко говоря, указатель содержания документа основан наID
Найдите документацию.
Перевернутый индекс: найти по содержимому документаДокументация.
Перевернутый индексСодержит следующую информацию:
- Словарь слов: для записислова для всех документов, и объединение слов в перевернутые списки.
- Инвертированный список: записывает набор документов, соответствующих словам, состоящий из инвертированных элементов индекса, которые содержат
- Идентификатор документа
- Количество вхождений слова, используемого для оценки релевантности
- где появляется слово
- Смещение, используемое для записи начальной и конечной позиции слова, используемое для выделения слова
пример того, что естьположительный индексиПеревернутый индекс,вположительный индексследующее:
Идентификатор документа | содержание документа |
---|---|
1101 | Elasticsearch Study |
1102 | Elasticsearch Server |
1103 | master Elasticsearch |
Возьмем пример вышеElasticsearch
изменить слово наПеревернутый индекс,следующее:
Идентификатор документа (ID документа) | Количество вхождений (TF) | Должность | Компенсировать |
---|---|---|---|
1101 | 1 | 0 | <0,13> |
1102 | 1 | 0 | <0,13> |
1103 | 1 | 1 | <7,20> |
Elasticsearch
Каждое поле имеет свой инвертированный индекс, и вы также можете указать некоторые поля, которые не будут индексироваться, что может сэкономить место для хранения, но недостатком является то, что по нему нельзя искать.
1.5. Сегментация анализатора
Analysis
: Анализ текста, который преобразует текст в слова (term
илиtoken
) процесс, гдеAnalyzer
черезAnalysis
осуществленный,Elasticsearch
Дайте нам встроенные примеры многих токенизаторов.
-
Standard Analyzer
: токенизатор по умолчанию, сегментированный по словам и преобразованный из верхнего регистра в нижний. -
Simple Analyzer
: Разделить по небуквенным символам (символы фильтруются) и преобразовать верхний регистр в нижний. -
Stop Anayzer
: стоп-слова (the
,is
) разделяется и преобразуется из верхнего регистра в нижний. -
Whitespace Anayzer
: сегментация пробелов, не преобразовывать верхний регистр в нижний. -
IK
: китайский токенизатор, требует установки плагина -
ICU
: Интернационализированный токенизатор, требует установки плагина. -
jieba
: популярный китайский токенизатор. Способ установки см. в приложении
PS:
Elasticsearch
установить плагин,[root@34d02ff9d16c elasticsearch]# bin/elasticsearch-plugin install analysis-icu
Посмотреть установленные плагины:
bin/elasticsearch-plugin list
1.6.Search API
существуетES
, мы можем использоватьURL Search
иRequest Body Search
Выполнение связанных операций запроса.
URL-запрос
Использовать базовый запрос
GET /user/_search?q=2012&df=title&sort=year:desc&from=0&size=10
{
profile: true
}
- использовать
q
строка, определяющая запрос - использовать
df
Укажите поля для запроса - использовать
sort
сортировать, использоватьfrom
иsize
Указать пагинацию - использовать
profile
Вы можете запросить, как выполняется запрос
Общий запрос с указанием всех полей
GET /user/_search?q=2012
{
"profile":"true"
}
Запрос для указанного поля
GET /user/_search?q=title:2012&sort=year:desc&from=0&size=10&timeout=1s
{
"profile":"true"
}
Срок запроса
GET /user/_search?q=title:Beautiful Mind
{
"profile":"true"
}
- в примере выше
Beautiful
иMind
только дваTerm
,Term
является наименьшей единицей в запросе. -
Term
запросOR
отношения, в приведенном выше примереtitle
поле содержитBeautiful
или содержитMind
будет получено.
Фразовый запрос
GET /user/_search?q=title:"Beautiful Mind"
{
"profile":"true"
}
- использоватькавычкивыражать
Phrase
Запрос -
Phrase
Запрос выражает не толькоAnd
отношения, то естьTitle
Поля должны содержать не толькоBeautiful Mind
,и. Порядок должен быть таким же.
Групповой запрос
GET /user/_search?q=title:(Beautiful Mind)
{
"profile":"true"
}
- использоватьквадратных скобкахОбозначает сгруппированный запрос, обычно используется
Term
При запросе он принесет групповой запрос.
логический запрос
- использовать
AND
,OR
,NOT
или||
,&&
,!
- также можно использовать
+
(Выражатьmust
),использовать-
(Выражатьmust_not
) - Обратите внимание, что оно должно быть написано с большой буквы
GET /user/_search?q=title:(Beautiful NOT Mind)
{
"profile":"true"
}
GET /user/_search?q=title:(Beautiful %2BMind)
{
"profile":"true"
}
PS:
%2B
Значит это+
, приведенный выше пример показывает, чтоtitle
поле должно содержать обаBeautiful
, в том числеMind
поле
запрос диапазона
GET /user/_search?q=title:beautiful AND age:[2002 TO 2018%7D
{
"profile":"true"
}
- использовать
[ ]
Чтобы представить закрытый интервал, используйте{ }
представляет собой открытый интервал, напримерage :[* TO 56]
- Используйте арифметические операторы для представления диапазонов, например.
year :>=2019 && <=1970
PS:
URL Search
Существует множество методов запроса. Например, не рекомендуется использовать запрос с подстановочными знаками, обычную вставку, нечеткое сопоставление, аналогичный запрос и запрос с подстановочными знаками.
Запрос тела запроса
Поместите условные параметры запроса вRequest Body
, вызвать интерфейс запроса, т.е.Request Body
Спросите,
базовый запрос
POST /movies,404_idx/_search?ignore_unavailable=true
{
"profile": true,
"query": {
"match_all": {}
}
}
- использовать
gnore_unavailable=true
индекса можно избежать404_idx
Ошибки, которых не существует -
profile
иURL Search
Как и в случае с запросом, вы можете увидеть, как выполняется запрос.
Пейджинговый запрос
POST /movies/_search
{
"from":10,
"size":20,
"query":{
"match_all": {}
}
}
Сортировать запрос
POST /movies/_search
{
"sort":[{"order_date":"desc"}],
"query":{
"match_all": {}
}
}
Фильтровать поля для запроса
POST /movies/_search
{
"_source":["order_date"],
"query":{
"match_all": {}
}
}
- Если в документе слишком много полей, нам не нужно отображать все поля, мы можем использовать
_source
Укажите поля. Можно использовать подстановочные знаки.
запрос с помощью скрипта
- будет
ES
После некоторой обработки полей документа в
GET /movies/_search
{
"script_fields": {
"new_field": {
"script": {
"lang": "painless",
"source": "doc['name'].value+'是大佬'"
}
}
},
"query": {
"match_all": {}
}
}
Срок запроса
POST /movies/_search
{
"query": {
"match": {
"title": "last christmas"
}
}
}
POST movies/_search
{
"query": {
"match": {
"title": {
"query": "last christmas",
"operator": "and"
}
}
}
}
- использовать
match
, что обозначаетOR
Отношение - использовать
operator
, указывающий метод запроса
Math_phrase запрос
POST movies/_search
{
"query": {
"match_phrase": {
"title":{
"query": "one love",
"slop": 4
}
}
}
}
-
slop
Символы, разрешенные среди символов, указанных в запросе
1.7.Dynamic Mapping
Mapping
Это может быть просто понято как база данныхSchema
определить, определитьимя поля в индексе,Определить тип поля,Инвертированный индекс поля,Указывает, какой токенизатор использовать для поляЖдать.Dynamic Mapping
Это означает, что когда мы создаем документ, если индекс не существует, индекс будет создан автоматически, и в то же время он будет автоматически создан.Mapping
,ElasticSearch
Это автоматически поможет нам рассчитать тип поля, конечно, когда расчет будет неточным, нам нужно установить его вручную. Общие типы полей следующие:
- Простой тип:
Text
,Date
,Integer
,Boolean
Ждать - Сложные типы: объектные типы и вложенные типы.
мы можем использоватьGET /shgx/_mapping
индекс запросаMapping
настройки обратите внимание на следующее:
- Когда мы добавляем поля в документы в индексе, мы надеемся обновить индекс.
Mapping
вы можете установитьDynamic:true
. - Для полей, в которых уже есть данные, больше нельзя изменять их
Mapping
,так какLucene
Изменения не допускаются после создания инвертированного индекса.
Dynamic Mapping
Можно установить три значения, а именно:
-
true
: Документы могут быть проиндексированы, и новые поля также могут быть проиндексированы.Mapping
также будет обновляться. -
false
: Документы могут быть проиндексированы, новые поля не могут быть проиндексированы,Mapping
не будет обновляться. -
strict
: Напишите новое поле и сообщите об ошибке напрямую.
Как написать карту
Первый способ – обратиться к официальномуAPI
, написанный от руки, или вы можете создать временныйIndex
позволятьElasticSearch
автоматически, когда мы выводим основныеMapping
, а затем измените его самостоятельно и, наконец, удалите временный файл index. Ниже приведены некоторые часто используемыеMapping
Установить свойства:
-
index
: Вы можете указать, нужно ли индексировать поле. Установить какfalse
Не будет создан инвертированный индекс, что сэкономит дисковые ресурсы. -
null_value
: в состоянии контролироватьNULL
может быть проиндексирован -
cope_to
: поместите значение поля в новое поле, новое поле можно использоватьsearch
, но это поле не появляется в_source
середина. -
anaylzer
: токенизатор для указанного поля -
search_anaylzer
: указывает токенизатор, используемый индексом -
index_options
: Управляет структурой генерации инвертированного индекса, есть четыре случая-
docs
: Инвертированный индекс записывает только документыID
-
freqs
: ЗадокументированоID
иTerm
-
positions
: ЗадокументированоID
,Term
иTerm Position
-
offsets
: ЗадокументированоID
,Term
,Term Position
иoffsets
-
PS:
Text
Поле типа по умолчанию имеет значениеPosition
, другие типы по умолчаниюdocs
, чем больше записей записано, тем больше места для хранения занято.
1.8.Агрегативный анализ агрегации
ElasticSearch
Не только мощный поиск, но и его статистическая функция также довольно мощная.Агрегативный анализ заключается в подсчете количества категорий всех данных, например, сколько новых зданий находится в районе Ухоу. Сколько новой недвижимости в новом районе Тяньфу, мы можем получить, просто написав одно предложение с помощью совокупного анализа. добавлениеKibana
Визуальный анализ просто нагляден и эффективен. Обычно используются следующие коллекции:
-
Bucket Aggregation
: некоторые коллекции, отвечающие определенным условиям, с использованием ключевых словterms
-
Metric Aggregation
: Простые математические операции, статистический анализ полей, использование ключевых словmin
,max
,sum
,avg
д., используя ключевые словаaggs
-
Pipeline Aggregation
: вторичная агрегация -
Matrix Aggregation
: работать с несколькими полями, предоставляя матрицу результатов
Пример анализа сегмента
GET kibana_sample_data_flights/_search
{
"size": 0,
"aggs":{
"flight_dest":{
"terms":{
"field":"DestCountry"
}
}
}
}
Пример анализа метрик
GET kibana_sample_data_flights/_search
{
"size": 0,
"aggs":{
"flight_dest":{
"terms":{
"field":"DestCountry"
},
"aggs":{
"avg_price":{
"avg":{
"field":"AvgTicketPrice"
}
},
"max_price":{
"max":{
"field":"AvgTicketPrice"
}
},
"min_price":{
"min":{
"field":"AvgTicketPrice"
}
}
}
}
}
}
Приложение I
Связанное Чтение
- Установить
docker
:woohoo.docker.com/products/do… - Установить
docker-compose
:docs.docker.com/compose/INS… -
Elasticsearch + Logstash + Kibana
изdocker-compose
Конфигурация:GitHub.com/Деви Энтони/… -
docker
УстановитьElasticsearch
плагин:Woohoo.elastic.co/talent/blog/hungry… -
Elasticsearch
китайское сообществоelasticsearch.cn/ -
Beats
Продукт:woohoo.elastic.co/capable/download… - Хороший китайский токенизатор:github.com/fxsjy/jieba
- Хороший английский токенизатор:github.com/nltk/nltk
-
IK
Токенизатор:GitHub.com/many out/E последний… -
THULAC
Tokenizer, токенизатор Департамента обработки естественного языка Университета Цинхуа.GitHub.com/Dizzy Wife/TH UL… -
ES
История развития:woo woo woo.cn blog on.com/Wang Zhen379… - Развертывание ELK6.0::Elasticsearch+Logstash+Kibana создает распределенную платформу журналов
- Инструмент визуализации кластера ElasticSearch cerebro
- Тестовая загрузка набора данных
Для получения дополнительных статей и более удобного чтения перейдите на свой личный веб-сайт, чтобы просмотретьБлог о кодовом соусе