编辑:简化了我的问题
我有事件日志流到单个Elasticsearch索引“日志”中。
这些事件日志中的每一个都代表长时间运行过程中的单个事件。事件日志的状态为“已排队”->“初始化”->“运行”->“已完成”。
现在,我想查询正在运行的作业的索引...但是,如果我搜索status =“ 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
答案 0 :(得分:0)
所以,说实话!我确实了解上下文和所有内容。但是,我不太明白你的问题。您要在这里实现的目标是什么?
也许在您的结尾(很好的解释:D),将问题清楚地放在结尾。 :)