Редактировать: Упростил мой вопрос
У меня есть журналы событий, передаваемые в один «журнал» индекса эластичного поиска.
Каждый из этих журналов представляет одно событие в каком-то длительном процессе. Журнал событий имеет статус скажем со значениями queued-> init-> running-> закончен.
Теперь я хочу запросить мой индекс для выполнения заданий ... но если я ищу статус = "выполняется", Я также получу работу, которая была закончена позже. Как человек, я бы искал журналы с «бегущим» событием, но без «готового» события.
Скажем, мне пришлось сгребать листья, убирать дом, а затем обедать. Мои журналы событий выглядят так:
{job: "rake leaves" status: "queued"}
{job: "clean house" status: "queued"}
{job: "eat lunch" status: "queued"}
{job: "rake leaves" status: "started"}
{job: "rake leaves" status: "running"}
{job: "rake leaves" status: "finished"}
{job: "clean house" status: "started"}
{job: "clean house" status: "finished"}
{job: "clean house" status: "running"}
{job: "eat lunch" status: "started"}
{job: "eat lunch" status: "running"}
Как найти запущенные задания, которые еще не завершены? В этом случае есть обед - единственная работающая работа. Я буду расширять это, чтобы также искать работы в очереди, которые еще не начались. Статус не имеет значения.
Моя текущая мысль - использовать обратную вложенную агрегацию для всплытия всех статусов, а затем отфильтровывать элементы, которые мне не нужны. Я мог бы также вероятно использовать агрегатор терминов с min_doc_count, чтобы получить то, что мне нужно.
Примеры
curl -H "Content-Type: application/json" -XPUT "http://localhost:9200/jobs/" -d'
{
"mappings": {
"event": {
"properties": {
"name": {
"type": "keyword"
},
"status": {
"type": "keyword"
}
}
}
}
}'
curl -H "Content-Type: application/json" -XPOST "http://localhost:9200/jobs/_bulk" -d'
{"index":{"_index":"jobs","_type":"event"}}
{"name":"job0", "status":"init"}
{"index":{"_index":"jobs","_type":"event"}}
{"name":"job1", "status":"init"}
{"index":{"_index":"jobs","_type":"event"}}
{"name":"job2", "status":"init"}
{"index":{"_index":"jobs","_type":"event"}}
{"name":"job0", "status":"running"}
{"index":{"_index":"jobs","_type":"event"}}
{"name":"job1", "status":"running"}
{"index":{"_index":"jobs","_type":"event"}}
{"name":"job0", "status":"finished"}
'
curl -H "Content-Type: application/json" -XGET http://localhost:9200/logs/event/_search -d'
{
"aggs": {
"duplicateNames": {
"terms": {
"field": "name",
"min_doc_count": 2
}
}
}
}' | python -m json.tool