ElasticSearch

ElasticSearch - поисковая NoSQL-бд

Установка

Через Docker:

docker run -p 9200:9200 -p 9300:9300 -d --name es -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.4.3

Иначе так

Конфигурация для supervisor:

[program:elasticsearch]
user=elasticsearch
command=/usr/share/elasticsearch/bin/elasticsearch
autostart=true
autorestart=true
environment=ES_HEAP_SIZE=2g

Помимо ElasticSearch, полезно поставить Kibana - веб-апп для просмотра содержимого бд

Ставится так

Конфигурация для supervisor:

[program:kibana]
user=root
command=/usr/share/kibana/bin/kibana
autostart=true
autorestart=true

Статус

Статус elasticsearch можно посмотреть так:

curl -X GET "localhost:9200/_cluster/health"

Описание метрик можно найти тут

status: yellow && unassigned_shards > 0

При запуске elasticsearch на одной машине без репликации появляются неназначенные шарды

Чтобы убрать их, нужно обнулить количество реплик для каждого индекса:

curl -X PUT "localhost:9200/*/_settings" -H 'Content-Type: application/json' -d'{"index" : {"number_of_replicas" : 0}}'

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

API

Если нужно просто вставлять записи (например, логи), то достаточно юзать лоулевел-клиент:

# pip install elasticsearch

from elasticsearch import Elasticsearch
es = Elasticsearch()

# индекс - местный аналог бд, создается автоматически
index = "test_index"

# док-тайп - местные таблицы, устарели с версии 6+, так что можно юзать 1 на индекс
doc_type = "test_doc_type"

# бд - документноориентированная, можно сувать любой словарь
doc = {
    'author': 'kimchy',
    'text': 'Elasticsearch: cool. bonsai cool.',
    'timestamp': datetime.now(),
}

# суем в ES
res = es.index(index=index, doc_type=doc_type, body=doc)

Док появляется в индексе, далее выбираем индекс в Kibana:

Management > Index Patterns > Create Index Pattern > {index_name}

и все - можно анализировать записи

Если нужно делать запросы к индексам в коде, то юзаем хайлевел-клиент

Last updated

Was this helpful?