kbook


Project maintained by atilla777 Hosted on GitHub Pages — Theme by mattgraham
Главная страница
ELK

Elasticsearch

Основные сведения

Принцип работы кластера

Каждый узел кластера может иметь несколько ролей (по умолчанию узел имеет все роли, кроме tribe)

Рекомендуется один узел выделить под роль master, а остальные под data (и неявно под остальные роли).

Пример построения отказоустойчивого кластера, распределенного по нескольким центрам обработки данных.

Индекс Lucene состоит из сегментов, которые могут со временем объединяться в более крупные сегменты. Это объединение затратно по ресурсам. Поэтому рекомендуется отключать объединение сегментов Lucene при выполнении операций массвого индексирования (например, при первоначальном индексировании больших объемов документов).

Установка

Установка производится согласно официальной документации. Java SDK, необходимая для работы elasticsearch, уже входит в сотав дистрибутива elasticsearch (находится в папке sdk). При устаноке на Windows следует избекать кирилических названий в папке размещения Elasticsearch. Например, разместить папку с elasticsearch по такому пути c:\elasticsearch

Сбор информации о состоянии elasticsearch

Общая информация об узле

curl localhost:9200

Перечень доступных диагностических полей

curl localhost:9200/_cat

Роли узла и показатели производительности (загрузки)

curl http://localhost:9200/_nodes/stats?pretty

Индексы узла

curl localhost:9200/_cat/indices?v

Шаблоны индексов

curl localhost:9200/_template

Mapping индекса

curl  localhost:9200/logst*/_mapping?pretty

Состояние работоспособности

curl localhost:9200/_cat/health?v

Добавление и удаление данных

Управление elasticsearch и манипулирование его данными осуществляется с помощью с REST.

Создать индекс

curl -XPUT localhost:9200/<индекс>

Если после индекс задать параметр pretty (localhost:9200/индекс?pretty) то ответ сервера будет в читабельном виде. Добавить документ в индекс

curl -XPUT localhost:9200/<индекс>/<тип>/1 {"поле": "значение"}

где 1 это id документа, если его не указать, он будет сгенерирован как случайное значение.

Если индекс предварительно не существовал, он будет создан при добавлении документа.

Для замены документа, достаточно добавить в индекс документ с id редактируемого документа.

Обновление документа (можно обновлять и добавлять поля):

curl -XPOST "localhost:9200/<индекс>/<тип>/1/_update" -d "
{ "doc":
  { "поле" :"значение"}
}"

Получить документ

curl -XGET localhost:9200/<индекс>/<тип>/1

Удалить документ (можно несколько, через запрос)

curl -XDEL localhost:9200/<индекс>/<тип>/1/_

Удалить все индексы (вместе с документами)

curl -XDELETE localhost:9200/_all

Пакетная обработка (выполнение нескольких манипуляций с данными в одном HTTP запросе)

curl -XPOST localhost:9200/<индекс>/<тип>/_bulk {запрос}

Дынные (json) могут быть переданы в запрос через файл

curl -XPOST localhost:9200/<индекс>/<тип>/_bulk --data-binary файл

Поиск данных

Основные служебные поля

Поля которые начинаются с символа _ являются служебными (например, _source).

В поле _source содержится исходный (индексируемый) документ (json объект).

В поле _version содержится номер версии документа.

Поиск, фильтрацию, сортировку и прочие вещи, связанные с анализом данных, лучше выполнять не через curl (описано) ниже, а через Kibana

Запросы

Запросы бывают в двух контекстах:

Указанные выше контексты могут использоваться в одном запросе.

Для поиска данных используется Query DSL.

Запрос всех документов (по умолчанию выдаются первые 10 результатов)

curl localhost:9200/<индекс>/_search?q=*

или

curl -XPOST -H 'Content-Type: application/json" "localhost:9200/<индекс>/_search" -d "
{
  "query": { "match_all": {} }
}"

в имени индекса, в типе, а также в именах и значениях полей можно использовать символ *, который соответствует любым символам

Основные параметры запроса

Начиная с какой записи возвращать документы (аналог OFFSET в БД)

"from": 10

Количество возвращаемых документов (аналог LIMIT в БД)

"size": 10

Поиск документов, поле которых удовлетворяет условию:

{
"query": { "match": { "поле": <значение> } }
}'

Где значение может содержать несколько термов (осуществляет поиск совпадения с любым из них)

“терм терм2 терм3”

Для поиска совпадения по фразе вместо match используется match_phrase.

В этом случае ES будет искать совпадение с фразой (“терм терм2 терм3”).

Логический запрос (bool)

{
  "query": {
    "bool": {
      "условие": [
        { "match": { "<поле1>": "<значение1>" } },
        { "match": { "<поле2>": "<значение2>" } }
      ]
    }
  }
}

Где условие может быть

Сортировка

Сортировать возвращаемые документы по указанному полю

"sort": { "поле": { "order": "desc" } }

Агрегирование

Администрирование

По умолчанию elasticearch работает на порту 9200 (HTTP).

Резервное копирование

Создать резервную копию данных

curl -XPUT "localhost:9200/_snapshot/my_backup/snapshot_1?wait_for_completion=true"

Восстановить данные из резервной копии

curl -XPOST "localhost:9200/_snapshot/my_backup/snapshot_1/_restore"