Добрый день.
Недавно обновил версию ES (c 1.4 до 2.0) и имею ситуацию когда значительно увеличилось время REST запроса при добавлении документа. Добавление идет через
es.update(index=index_name, doc_type='product', id=a.pid, body={'doc': a.to_product(), 'doc_as_upsert': True}, fields=['f1', 'f2'], retry_on_conflict=3, refresh=False)
В добавлении участвует 20 воркеров (celery, elasticsearch-py) , и я получаю что то подобное, вплоть до 3-4 секунд на одну операцию:
POST http://localhost:9200/index_name/doc_type/string_id/_update?retry_on_conflict=3&refresh=false [status:200 request:1.905s]
На предыдущей версии ES скорость обработки сообщений брокера доходила до полутора тысяч в секунду, сейчас же имею: ~6/сек. , т.е. ранее скорость выполнения аналогичного запроса была на уровне:
[status:200 request:0.009s]
С чего начать профилирование, где может быть зарыта проблема? При переходе на ES 2.0 индекс не пересоздавался, имеет немногим более 5М документов и 4Gb размера. Максимум что я сделал это внес следующие настройки в индекс:
{
"index": {
"refresh_interval": "30s",
"store.throttle.type": "none",
"translog.flush_threshold_size": "4g",
"translog.flush_threshold_ops": 500000
},
"indices": {
"store.throttle.type": "none"
}
}
... и прочитал статью о том что ES в версии 2.0 сам определит как ему работать, все что нужно это использовать настройки по умолчанию
P.S. Пока искал ответы на этот вопрос, вероятно нашел решение проблемы которая имела место: правильно ли я понимаю, что при
"brand": {
"properties": {
"alias": {
"type": "string",
"index": "not_analyzed"
},
"active": {
"type": "boolean"
},
"title": {
"type": "completion",
"payloads": true,
"context": {
"type": {
"type": "category",
"path": "_type"
},
"status": {
"type": "category",
"path": "active"
}
}
}
}
}
я должен был использовать для suggest запроса в контексте по полю status
не true или false, а 1 или 0
Заранее спасибо.