Каждый узел кластера может иметь несколько ролей (по умолчанию узел имеет все роли, кроме tribe)
Рекомендуется один узел выделить под роль master, а остальные под data (и неявно под остальные роли).
Индекс Lucene состоит из сегментов, которые могут со временем объединяться в более крупные сегменты. Это объединение затратно по ресурсам. Поэтому рекомендуется отключать объединение сегментов Lucene при выполнении операций массвого индексирования (например, при первоначальном индексировании больших объемов документов).
Установка производится согласно официальной документации. Java SDK, необходимая для работы elasticsearch, уже входит в сотав дистрибутива elasticsearch (находится в папке sdk). При устаноке на Windows следует избекать кирилических названий в папке размещения Elasticsearch. Например, разместить папку с elasticsearch по такому пути c:\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"