欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > elasticsearch查询中的特殊字符影响分析

elasticsearch查询中的特殊字符影响分析

2025/4/25 21:02:45 来源:https://blog.csdn.net/weixin_43927244/article/details/147481213  浏览:    关键词:elasticsearch查询中的特殊字符影响分析

大家先看一个执行的dsl 查询sql,大致的意思是排除某些分类下的商品

GET /productinfos/_search
{"from": 0,"query": {"bool": {"must": [{"exists": {"field": "minprice"}},{"bool": {"should": [{"terms": {"productClass": ["-114-","-114-113-","-2-","-5-58-","-61-69-","-7-","-7-82-"]}}]}}],"must_not": [{"terms": {"spuId": ["85","7","10","11"]}}]}},"size": 10,"sort": [{"_score": {"order": "desc"}}]
}

当我在kibana中执行的时候,可以很快速的查询出结果,但是当我用java api 执行的时候,完全一样的dsl,但是是查询不到结果的。

索引中的 productClass 是keyword类型,我第一反应就是匹配的值不对,第二反应就是特殊字符没有转义,当我用// * 各种转义符处理的时候,依然是这种情况,我就开始深度思考了。

我观察了数据的形式 -114-113-,突然想到了可能是-的问题,果不其然,-在elasticsearch中还有一层表示,就是 must_not,也就是 相当于去匹配了 114-113- ,这样肯定是匹配不到的。

但是为什么在kibana 中是可以的呢?原来kibana是会自动处理的。

如果去全量更新数据的值,这个工作量和复杂度实在是不可取,到底能不能用api去匹配,当然可以!但是需要注意两点

1 字段必须有个keyword类型

2 还要避开 - 这个特殊字符的 特殊含义

索引在api中不能直接用字段productClass字段,需要指定为productClass.keyword,强制按照string类型去匹配

结果一切正常!!

所以我们以后存储数据的时候,一定要注意字符的使用!不然大坑实在是太多。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词