我有以下文件:
Type 1 (stats from component A) -
_sources {
"@version": "1",
"@timestamp": "2015-11-02T06:50:11.170Z",
"stat_type": 1,
"ConnectionCount": 1,
"ReceivedCount": 2,
"AcceptedCount": 0,
"host": "my-pc",
"component_type": "A",
}
Type 2 (Stats from component B) -
_sources {
"@version": "1",
"@timestamp": "2015-11-02T06:50:11.170Z",
"stat_type": 1,
"SuccessCount": 2,
"host": "my-pc",
"component_type": "B",
}
从这两种类型的文档中,我想做以下事情 -
我对弹性搜索和弹性模型有基本的了解。
我试图了解elasticserach脚本来查询elasticsearch,但由于两个记录中的不同列而无法做到这一点。
请指导。
答案 0 :(得分:0)
我即将发布并回答建议使用nested
或parent-child
文件来执行此操作"加入"但后来我意识到仍然无法为文档A
的字段值与doc B
的值不同的文档创建查询。
您可以使用terms aggregation获取AcceptedCount
的不同值,然后为每个不同的值x
查询"文档WHERE AcceptedCount = x
AND SuccessCount! = x
" (使用must
和must_not
使用term filter)。如果不同AcceptedCount
值的数量较少,则不应该具有非常糟糕的性能,不同的过滤器可以放在单个should
块中,因此单个ES查询就足够了。
此查询可以在component_type
A
和B
存储在nested documents中的文档上执行。如果还有其他组件类型,那么您也需要嵌套文档。文档' _id
将从"自然键"生成timestamp
,host
和start_type
。