项目中ES关键字查询遇到的坑,本来如果在创建关键字字段的时候就应该限制一些特殊符号的输入的,比如限制只能输入字母下划线和数字这种,不用允许输入特殊符号(@,$,*...),结果项目经理不让,说是限制了不好。那就只能后台对这些特殊符号进行转义。

ES的javaAPI里面是有转义方法的,如下:

String keyword = "title+-&&||!(){}[]^\"~*?:\\";
keyword = QueryParser.escape(keyword);

可以看看QueryParser的escape方法是怎么实现的

/*** Returns a String where those characters that QueryParser* expects to be escaped are escaped by a preceding <code>\</code>.*/public static String escape(String s) {StringBuilder sb = new StringBuilder();for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);// These characters are part of the query syntax and must be escapedif (c == '\\' || c == '+' || c == '-' || c == '!' || c == '(' || c == ')' || c == ':'|| c == '^' || c == '[' || c == ']' || c == '\"' || c == '{' || c == '}' || c == '~'|| c == '*' || c == '?' || c == '|' || c == '&' || c == '/') {sb.append('\\');}sb.append(c);}return sb.toString();}

最后发现这些并不够用,于是我自己把它copy出来做了些补充,扩展了一些中文的字符进去

 /*** Returns a String where those characters that QueryParser* expects to be escaped are escaped by a preceding <code>\</code>.*/public static String escape(String s) {StringBuilder sb = new StringBuilder();for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);// These characters are part of the query syntax and must be escapedif (c == '\\' || c == '+' || c == '-' || c == '!' || c == '(' || c == ')' || c == ':'|| c == '^' || c == '[' || c == ']' || c == '"' || c == '{' || c == '}' || c == '~'|| c == '*' || c == '?' || c == '|' || c == '&' || c == '/'|| c == '#'|| c == '@'|| c == '('|| c == ')'|| c == '>'|| c == '<'|| c == '“'|| c == '”'|| c == '?'|| c == '、'|| c == '.') {sb.append('\\');}sb.append(c);}return sb.toString();}

更让我纳闷的是中文的“:”,它居然会被当做英文的“:”来用了

不知道是不是我没用对,路过的同仁请指正。

ES关键字查询-特殊符号相关推荐

  1. cad模糊查询符号_模糊查询(排除%等通配符并支持不连续关键字查询)

    前段时间我在开发项目的时候,就关于模糊查询遇到了一点问题,主要是有两大问题:1.通配符问题:2.不连续关键字查询.下面我一一说出我是怎么解决的: 1.统配符问题 比如说在搜索框中输入'%'.'_'.' ...

  2. 【ES知识】ES基础查询语法一览

    大家好,我是老坛. 更多优质文章资源请关注同名公众号:老坛聊开发 Elasticsearch是一个分布式的RESTful 风格的搜索和数据分析引擎,它使用方便,查询速度快,因此也被越来越多的开发人员使 ...

  3. Elasticsearch(es) 查询语句语法详解

    Elasticsearch 查询语句采用基于 RESTful 风格的接口封装成 JSON 格式的对象,称之为 Query DSL.Elasticsearch 查询分类大致分为全文查询.词项查询.复合查 ...

  4. elasticsearch(es)高级查询api

    yml配置 #es配置 spring:elasticsearch:rest:uris: 192.168.16.188:9200 添加依赖 <dependency><groupId&g ...

  5. ES关键字排序报错 reason=Fielddata is disabled on text fields by default. Set fielddata=true on 关键字 in order

    问题描述 在使用 java 编写 ES 的查询接口的时候,需要根据某关键字进行排序并返回数据,但是在排序的时候报错如下: ElasticsearchStatusException[Elasticsea ...

  6. Elasticsearch 实战 - 第四讲:ES 高级查询

    Elasticsearch 实战 - 第四讲:ES 高级查询 Elasticsearch 实战系列文章: 一.高级查询 1.简介 2.结果排序 3.分页查询 4.检索查询 5.关键字查询 6.高亮显示 ...

  7. ES基本查询语句教程

    前言 es是什么? es是基于Apache Lucene的开源分布式(全文)搜索引擎,,提供简单的RESTful API来隐藏Lucene的复杂性. es除了全文搜索引擎之外,还可以这样描述它: 1. ...

  8. ES(elasticsearch)查询或搜索总结

    很多写说明文档,没有总结写开头.因为文档内容又很多,你看到后面就忘记前面,没有形成结构化知识.这样知识在大脑里是离散的,不完整,不准确的. 所以我的文章都是把结论写最开始,或者要说的全部内容用一句话写 ...

  9. SpringBoot整合ES高级查询

    SpringBoot整合ES高级查询 springboot版本:2.0.5.RELEASE elasticsearch版本:7.9.1 1.配置 引入依赖: <dependency>< ...

最新文章

  1. R语言使用ggplot2包的快速可视化函数qplot绘制散点图(添加平滑曲线与标准差带)实战
  2. 单月营收超 12 亿元,叮咚买菜如何携手神策数据造就增长神话?
  3. 重载运算符操作_学习
  4. 希尔排序+移位法(吊打交换法)
  5. 【HDU - 1533】Going Home(网络流,二分图最优匹配,KM算法)
  6. 1-10:学习shell之进程
  7. WebConfig另类操作
  8. java 三种错误类型 区别_请列举至少三种在java语言中发生“严重错误”的情况...
  9. 【Hard 递归 动态规划 回文串15】LeetCode 730. Count Different Palindromic Subsequences
  10. ATITIT提升效率 保持简单性 优化 简化 目录 1.1. 概念简单 1 1.2. 语言简单性 弱类型 动态变量 动态实体 1 1.3. 数据结构简单 arr 代替了array map s
  11. 鸿蒙os开机时间,再见了安卓!华为鸿蒙OS 2.0正式登场,开机只需19秒
  12. 方差分析软件_Minitab统计软件入门(一)
  13. cef 前进后台 实现_使用CefSharp前端后台交换
  14. 【验证码识别】OpenCV挑战极验滑动拼图验证码
  15. python np arange_python – 为什么np.arccos(1.0)在np.arange的情况下给出nan?
  16. discuz仿163k_discuz仿163K四色地方门户模板,仿163K地方模板,地方门户模板
  17. Linux——SAMBA文件共享
  18. OpenCV——图像处理入门:膨胀与腐蚀、图像模糊、边缘检测
  19. rtk定位权限_RTK定位原理概述
  20. 泛海微电动修脚器开发方案和电动修脚器单片机方案

热门文章

  1. 数据分析之Sql Server 如何计算年龄
  2. 我的世界服务器怎么修复乱码,我的世界服务器打字中文怎么是乱码?
  3. DataFactory造数-前期准备工作(DF安装、myodbc32的安装与配置、Oracle客户端的安装与配置)
  4. android白屏优化方案,优化Android App启动白屏
  5. 使用PIL包给图片增加水印
  6. 拼多多商品id怎么查看 拼多多店铺ID怎样看
  7. 计算机网络串行传输 并行传输,串行传输和并行传输的概念
  8. C++ 内存管理 - primitives - 侯捷
  9. Final SwfPlayer下载后在安卓12上玩宇宙的刻度2
  10. Artifact xxx:war exploded: Error during artifact deployment.