当前位置: 首页 > news >正文

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类型去匹配

结果一切正常!!

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

相关文章:

  • 【Hive入门】Hive分区与分桶深度解析:优化查询性能的关键技术
  • 【前端】【业务场景】【面试】在前端开发中,如何实现一个可拖动和可缩放的元素,并且处理好边界限制和性能优化?
  • 【FAQ】针对于消费级NVIDIA GPU的说明
  • 极狐GitLab 合并请求依赖如何解决?
  • Python字符串三剑客:len()、split()、join()深度解析
  • RK3588芯片NPU的使用:官方rknn_yolov5_android_apk_demo运行与解读
  • 【深度学习核心技术解析】从理论到实践的全链路指南
  • x-cmd install | brows - 终端里的 GitHub Releases 浏览器,告别繁琐下载!
  • Stack和Queue和deque的讲解(底层实现 手撕版)
  • ospf综合作业
  • 企业办公即时通讯软件BeeWorks,私有化安全防泄密
  • Java Agent 注入 WebSocket 篇
  • 移动通信行业术语
  • 去掉从网页粘贴到Word的“↓“(向下的箭头)符号的方法
  • SAIL-RK3588协作机器人运动控制器技术方案
  • java—13 RocketMQ
  • 理解欧拉公式
  • VBA技术资料MF300:利用Mid进行文本查找
  • linux 中断子系统 层级中断编程
  • SEO的关键词研究与优化 第二章
  • 审议民营经济促进法草案等,十四届全国人大常委会第十五次会议将举行
  • 大家聊中国式现代化|郑崇选:提升文化软实力,打造文化自信自强的上海样本
  • 杨靖︱“一笔糊涂账”:博马舍与美国革命
  • 佩斯科夫:俄美总统会晤正在筹备中,未设定停火最后期限
  • 从神舟五号到神舟二十号,每次任务标识藏着哪些逐梦星辰的密码
  • 什么是中国好手艺?材美、工巧、器韵、时宜