Kibana:如何让两个DSL查询按钮实现OR逻辑而非AND
可以实现,以下是具体解决方法
方法一:利用Kibana过滤器组实现OR逻辑
这是最直观的操作方式,无需手动编写复杂DSL:
- 在Discover页面,先创建第一个过滤器:点击日志内容里的
INFO关键词,选择「Add filter」,生成匹配INFO级别的过滤器 - 找到该过滤器右侧的
⋮菜单,选择Add filter to group,在弹出选项里设置组的逻辑关系为OR - 接着创建第二个过滤器:点击日志里的
ERROR关键词,选择「Add filter」,再把这个过滤器拖拽到刚才创建的OR组中 - 完成后,这个OR组内的两个过滤器会按OR逻辑生效:单独启用其中一个,过滤对应级别日志;同时启用两个,会展示所有INFO或ERROR级别的日志
方法二:自定义DSL实现组合逻辑
如果需要手动控制查询语句,可以把两个条件合并为一个OR查询(但此方法无法保留两个独立的启用/禁用按钮,仅做补充参考):
创建包含OR逻辑的过滤器,DSL如下:
{ "query": { "bool": { "should": [ { "match_phrase": { "message": "INFO" } }, { "match_phrase": { "message": "ERROR" } } ], "minimum_should_match": 1 } } }
问题根源说明
你之前遇到无结果的情况,是因为Kibana默认会把多个独立过滤器放入bool.must中,强制使用AND逻辑,而过滤器组功能可以让你自定义组内过滤器的逻辑关系,正好解决你的需求。
内容的提问来源于stack exchange,提问作者amsmota
相关产品推荐
相关产品推荐

