【发布时间】:2016-08-26 21:20:13
【问题描述】:
我的 ElasticSearch 索引中有此类文档:
{
"took" : 31,
"timed_out" : false,
"_shards" : {
"total" : 68,
"successful" : 68,
"failed" : 0
},
"hits" : {
"total" : 9103,
"max_score" : 8.823501,
"hits" : [{
"_index" : "ESB",
"_type" : "MDOrderFO",
"_id" : "AVaxDzEGBclOg4W8YiW1",
"_score" : 8.823501,
"_source" : {
"message" : "<root><flux>MyFlux</flux><requestId>123</requestId><timeStamp>2016-26-08T09:37:17</timeStamp><step>1</step><status>ok</status><body><xml><myobject><field1>value1</field1></myobject></xml></body></root>",
"timestamp" : "2016-08-22T07:02:57.085Z",
"logger_name" : "MDOrderFOToFO"
}
}, {
"_index" : "ESB",
"_type" : "MDOrderFO",
"_id" : "AVaxDzEGBclOg4W8YiW1",
"_score" : 8.823501,
"_source" : {
"message" : "<root><flux>MyFlux</flux><requestId>123</requestId><timeStamp>2016-26-08T09:37:17</timeStamp><step>2</step><status>ok</status><body><xml><myobject><field1>value1</field1></myobject></xml></body></root>",
"timestamp" : "2016-08-22T07:02:57.085Z",
"logger_name" : "MDOrderFOToFO"
}
}, {
"_index" : "ESB",
"_type" : "MDOrderFO",
"_id" : "AVaxDzEGBclOg4W8YiW1",
"_score" : 8.823501,
"_source" : {
"message" : "<root><flux>MyFlux</flux><requestId>123</requestId><timeStamp>2016-26-08T09:37:18</timeStamp><step>3</step><status>ok</status><body><xml><myobject><field1>value1</field1></myobject></xml></body></root>",
"timestamp" : "2016-08-22T07:02:57.085Z",
"logger_name" : "MDOrderFOToFO"
}
}, {
"_index" : "ESB",
"_type" : "MDOrderFO",
"_id" : "AVaxDzEGBclOg4W8YiW1",
"_score" : 8.823501,
"_source" : {
"message" : "<root><flux>MyFlux</flux><requestId>123</requestId><timeStamp>2016-26-08T09:37:26</timeStamp><step>1</step><status>ok</status><body><xml><myobject><field1>value1</field1></myobject></xml></body></root>",
"timestamp" : "2016-08-22T07:02:57.085Z",
"logger_name" : "MDOrderFOToFO"
}
}, {
"_index" : "ESB",
"_type" : "MDOrderFO",
"_id" : "AVaxDzEGBclOg4W8YiW1",
"_score" : 8.823501,
"_source" : {
"message" : "<root><flux>MyFlux</flux><requestId>456</requestId><timeStamp>2016-26-08T09:37:27</timeStamp><step>2</step><status>ok</status><body><xml><myobject><field1>value1</field1></myobject></xml></body></root>",
"timestamp" : "2016-08-22T07:02:57.085Z",
"logger_name" : "MDOrderFOToFO"
}
}, {
"_index" : "ESB",
"_type" : "MDOrderFO",
"_id" : "AVaxDzEGBclOg4W8YiW1",
"_score" : 8.823501,
"_source" : {
"message" : "<root><flux>MyFlux</flux><requestId>456</requestId><timeStamp>2016-26-08T09:37:27</timeStamp><step>3</step><status>ok</status><body><xml><myobject><field1>value1</field1></myobject></xml></body></root>",
"timestamp" : "2016-08-22T07:02:57.085Z",
"logger_name" : "MDOrderFOToFO"
}
}, {
"_index" : "ESB",
"_type" : "MDOrderFO",
"_id" : "AVaxDzEGBclOg4W8YiW1",
"_score" : 8.823501,
"_source" : {
"message" : "<root><flux>MyFlux</flux><requestId>456</requestId><timeStamp>2016-26-08T09:37:17</timeStamp><step>2</step><status>ok</status><body><xml><myobject><field1>value1</field1></myobject></xml></body></root>",
"timestamp" : "2016-08-22T07:02:57.085Z",
"logger_name" : "MDOrderFOToFO"
}
}
]
}
}
这里是消息字段的XML格式:
<root>
<flux>MyFlux</flux>
<requestId>123</requestId>
<timeStamp>2016-26-08T09:37:17</timeStamp>
<step>2</step>
<status>ok</status>
<body><xml><myobject><field1>value1</field1></myobject></xml></body>
</root>
我想构建一个查询,可以根据 RequestId 值(在消息字段的 XML 内容中)对我的文档进行分组。 我期待这样的答案:
{
"took" : 31,
"timed_out" : false,
"_shards" : {
"total" : 68,
"successful" : 68,
"failed" : 0
},
"hits" : {
"total" : 9103,
"max_score" : 8.823501,
"hits" : [...],
"aggregations" : {
"myaggs" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [{
"key" : "123",
"documents" : [{
"_index" : "ESB",
"_type" : "MDOrderFO",
"_id" : "AVaxDzEGBclOg4W8YiW1",
"_score" : 8.823501,
"_source" : {
"message" : "<root><flux>MyFlux</flux><requestId>123</requestId><timeStamp>2016-26-08T09:37:17</timeStamp><step>1</step><status>ok</status><body><xml><myobject><field1>value1</field1></myobject></xml></body></root>",
"timestamp" : "2016-08-22T07:02:57.085Z",
"logger_name" : "MDOrderFOToFO"
}
}, {
"_index" : "ESB",
"_type" : "MDOrderFO",
"_id" : "AVaxDzEGBclOg4W8YiW1",
"_score" : 8.823501,
"_source" : {
"message" : "<root><flux>MyFlux</flux><requestId>123</requestId><timeStamp>2016-26-08T09:37:17</timeStamp><step>2</step><status>ok</status><body><xml><myobject><field1>value1</field1></myobject></xml></body></root>",
"timestamp" : "2016-08-22T07:02:57.085Z",
"logger_name" : "MDOrderFOToFO"
}
}, {
"_index" : "ESB",
"_type" : "MDOrderFO",
"_id" : "AVaxDzEGBclOg4W8YiW1",
"_score" : 8.823501,
"_source" : {
"message" : "<root><flux>MyFlux</flux><requestId>123</requestId><timeStamp>2016-26-08T09:37:18</timeStamp><step>3</step><status>ok</status><body><xml><myobject><field1>value1</field1></myobject></xml></body></root>",
"timestamp" : "2016-08-22T07:02:57.085Z",
"logger_name" : "MDOrderFOToFO"
}
}
]
}, {
"key" : "456",
"documents" : [{
"_index" : "ESB",
"_type" : "MDOrderFO",
"_id" : "AVaxDzEGBclOg4W8YiW1",
"_score" : 8.823501,
"_source" : {
"message" : "<root><flux>MyFlux</flux><requestId>123</requestId><timeStamp>2016-26-08T09:37:26</timeStamp><step>1</step><status>ok</status><body><xml><myobject><field1>value1</field1></myobject></xml></body></root>",
"timestamp" : "2016-08-22T07:02:57.085Z",
"logger_name" : "MDOrderFOToFO"
}
}, {
"_index" : "ESB",
"_type" : "MDOrderFO",
"_id" : "AVaxDzEGBclOg4W8YiW1",
"_score" : 8.823501,
"_source" : {
"message" : "<root><flux>MyFlux</flux><requestId>456</requestId><timeStamp>2016-26-08T09:37:27</timeStamp><step>2</step><status>ok</status><body><xml><myobject><field1>value1</field1></myobject></xml></body></root>",
"timestamp" : "2016-08-22T07:02:57.085Z",
"logger_name" : "MDOrderFOToFO"
}
}, {
"_index" : "ESB",
"_type" : "MDOrderFO",
"_id" : "AVaxDzEGBclOg4W8YiW1",
"_score" : 8.823501,
"_source" : {
"message" : "<root><flux>MyFlux</flux><requestId>456</requestId><timeStamp>2016-26-08T09:37:27</timeStamp><step>3</step><status>ok</status><body><xml><myobject><field1>value1</field1></myobject></xml></body></root>",
"timestamp" : "2016-08-22T07:02:57.085Z",
"logger_name" : "MDOrderFOToFO"
}
}, {
"_index" : "ESB",
"_type" : "MDOrderFO",
"_id" : "AVaxDzEGBclOg4W8YiW1",
"_score" : 8.823501,
"_source" : {
"message" : "<root><flux>MyFlux</flux><requestId>456</requestId><timeStamp>2016-26-08T09:37:17</timeStamp><step>2</step><status>ok</status><body><xml><myobject><field1>value1</field1></myobject></xml></body></root>",
"timestamp" : "2016-08-22T07:02:57.085Z",
"logger_name" : "MDOrderFOToFO"
}
}
]
}
]
}
}
}
}
我是 ElasticSearch 的新手,我花了一周的时间在这上面……而此时,我什至不知道这是否可能。
我真的希望你能帮助我。 提前谢谢你。
当然,作为一个说法语的人,对不起我的英语
编辑
- 不幸的是我无法编辑映射。我无权访问将日志保存到 E.S. 的部分过程
- 实际上,我给出的格式在现实中是非常简单的。在映射级别和 XML 内容中记录了许多其他技术信息。
上下文:将日志推送到 E.S. 的 BUS 应用程序。有3个步骤(1:接收,2:路由,3:发送)。它记录有关请求状态(正常、失败)和在此请求中传输的对象的信息。
我正在处理的应用程序的目的是显示有关已过境的所有请求的业务信息,即某个日期范围的 BUS 应用程序。
所以在我的查询中,我想:
1. 按 RequestId 聚合我的日志(每个组应在接收步骤包含 1 个日志,在路由步骤包含 0 或 1 个日志,在发送步骤包含 0 或 1 个日志)
2. 在接收步骤中过滤日志日期的结果组
3. 取前10组按日期降序排列
【问题讨论】:
标签: json xml elasticsearch aggregate