如何在Kibana中精准匹配以':1'结尾的Elasticsearch字段数据?
正确查询方法
问题根源
你之前的查询.*:1没有锚定字符串结尾,会匹配所有包含:1的记录(不管:1在什么位置),所以像skdjjsdk:jkdsjkd:123:1:33这种中间带:1的也被命中了。要精准匹配以:1结尾的记录,必须用$锚定字符串末尾,同时要确保查询的是字段的完整原始值(避免分词干扰)。
方案1:Kibana搜索框(Lucene语法)
- 如果
my_field是keyword类型,直接输入:my_field: ":1$" - 如果
my_field是text类型,需要用它的keyword子字段(Elasticsearch默认会为text字段生成该子字段,用于存储完整原始值):my_field.keyword: ":1$"
方案2:Elasticsearch Query DSL
用正则查询锚定结尾,同时指定keyword字段保证匹配完整值:
{ "query": { "regexp": { "my_field.keyword": { "value": ".*:1$" } } } }
也可以用通配符查询实现相同效果:
{ "query": { "wildcard": { "my_field.keyword": { "value": "*:1" } } } }
最终匹配结果
上述方法只会返回你需要的记录:
skdjjsdk:jkdsjkd:123:1:1
内容的提问来源于stack exchange,提问作者Vaibhav
相关产品推荐
相关产品推荐

