能否在Kibana中编写关联Guid与fish_tag的多阶段查询?
在Kibana中实现多阶段关联查询的方案
完全可以在Kibana中实现你需要的多阶段查询,以下是两种具体方案:
方案1:单个查询实现阶段2的效果(查询指定Guid关联的所有fish_tag对应文档)
如果只需要获取阶段2的结果,可通过聚合查询动态提取fish_tag值后执行关联查询:
- 先在Kibana Dev Tools中执行聚合查询,提取指定Guid对应的所有非空fish_tag值:
GET /你的索引名/_search { "size": 0, "aggs": { "unique_fish_tags": { "terms": { "field": "fish_tag", "size": 1000 // 根据实际可能的tag数量调整 } } }, "query": { "match": { "你的Guid字段名": "eb23c255-2986-4bf5-8b99-dd123affe739" } } }
从返回结果的aggregations.unique_fish_tags.buckets中提取所有key值,组成数组(比如["tag1", "tag2", ...])。
- 用提取的数组执行阶段2查询:
GET /你的索引名/_search { "query": { "terms": { "fish_tag": ["tag1", "tag2", ...] // 替换为刚才提取的tag数组 } } }
方案2:单个查询合并阶段1和阶段2的结果
要同时获取阶段1(匹配Guid的文档)和阶段2(关联fish_tag的文档)的合并结果,可使用bool查询的should子句,结合上述聚合得到的fish_tag数组:
GET /你的索引名/_search { "query": { "bool": { "should": [ { "match": { "你的Guid字段名": "eb23c255-2986-4bf5-8b99-dd123affe739" } }, { "terms": { "fish_tag": ["tag1", "tag2", ...] // 替换为聚合得到的tag数组 } } ], "minimum_should_match": 1 // 满足任一条件即可返回 } } }
优化:用Kibana变量实现自动关联
如果不想手动复制fish_tag数组,可在Kibana中创建查询变量:
- 进入Kibana的「Stack Management」→「Variables」→「Create variable」
- 选择「Query」类型,设置变量的数据源为第一步的聚合查询,提取
aggregations.unique_fish_tags.buckets.key作为变量值 - 之后在查询中直接使用变量
{{fish_tags_var}}代替手动输入的数组,实现自动关联查询
注意:若数据量较大,嵌套子查询的脚本方式会严重影响性能,不推荐使用,优先选择聚合+变量的方案。
内容的提问来源于stack exchange,提问作者Michael Sandler
相关产品推荐
相关产品推荐

