如何用Kibana KQL筛选仅含'live'的origin数组字段文档?
精准筛选仅含单个值的数组文档(KQL写法)
这个问题我之前帮别人解决过,确实踩过KQL数组匹配的坑——因为Elasticsearch对数组字段的匹配逻辑是只要包含目标值就会命中,不管数组里还有没有其他元素。要精准筛选origin数组仅包含"live"的文档,你需要把「存在live」和「数组长度为1」两个条件结合起来:
origin.keyword : "live" and array_length(origin) == 1
逻辑解释:
origin.keyword : "live":确保数组里包含live这个值array_length(origin) == 1:限制数组的元素个数只能是1,这样就排除了同时包含upload的情况
顺便给你另外两类的筛选条件(方便做可视化分组):
- 仅含upload:
origin.keyword : "upload" and array_length(origin) == 1 - 两者皆有:
因为你提到数组最多只有2个元素,所以可以直接写:
如果要更严谨(防止出现超过2个元素的意外情况),可以加上长度限制:origin.keyword : "live" and origin.keyword : "upload"array_length(origin) == 2 and origin.keyword : "live" and origin.keyword : "upload"
内容的提问来源于stack exchange,提问作者SolvedForHome
相关产品推荐
相关产品推荐

