Как говорит wiki — Elasticsearch это тиражируемая свободная программная поисковая система.
Подобные движки используются при сложном поиске по базе документов. Например, поиск с учетом морфологии языка или поиск по geo координатам.
Хочу поделиться с вами часто используемыми примерами запросов.
Просмотр всех индексов
Просмотр списка индексов:
GET _cat/indices
Для просмотра всех документов в индексах хранящихся в elastic выполните:
GET _search { "query": { "match_all": {} } }
Создание индекса
Создание индекса с настройками по умолчанию выполняются следующей командой:
PUT .history
Обновление данных в индексе
POST .history/_doc/zlF2-YIBbhSYlsdYa_kz/_update { "doc" : { "myfield": «new value» } }
Изменение параметров индекса
Стоит отметить что при сохранении первых данных в пустом индексе Elastic автоматически сделает маппинг данных на основе тех что вы ему передадите.
PUT .history/_mapping { "properties": { "query": { "type" : "text", "analyzer": "keyword", "fielddata": true } } }
Удаление индекса
DELETE .history
Удаление документа в индексе по ID
DELETE .history/_doc/kDLL_XcB1xupZgXeCj3H
Поиск в индексе
Для вывода определенного индекса отправьте следующий запрос, например:
GET .history/_search { "query": { "match": { "user": "admin" } } }
Где .history — это имя индекса, напишите сюда свой.
/_search — это команда поиска. Ниже идёт тело запроса имеющего формат JSON.
Поиск по нескольким полям
GET .history/_search { "query": { "bool": { "should": [ { "match": {"user": "admin"}}, { "match": {"query": "source sns_* qsize=10000"}} ] } } }
Поиск совпадений
GET .history/_count { "query": { "bool": { "must": [ { "term": {"user": "admin"}}, { "term": {"query": "source sns_* qsize=10000"}} ] } } }
Агрегирование данных
Параметр "size": 0
— убирает лимит на поиск;"field"
— имя поля по которому будет происходить агрегирование.
GET .history/_search { "query": { "match": { "user": "admin" } }, "size": 0, "aggs" : { "agg_query" : { "terms" : { "field" : "query", "size" : 500 } } } }
Агрегирование по нескольким полям
GET .history/_search { "size": 0, "query":{ "match": { "title": "example_title" } }, "aggs": { "hitCount": { "terms": { "field": "state_text.keyword", "size": 100000, "order": { "_key": "asc" } }, "aggs": { "month_counter": { "date_histogram": { "field": "timestamp", "interval": "month" } } } } } }