elk7.7.1【系列十六】java 封装 kql 查询条件
src_ip.keyword : 192.168.31.1 and category.keyword : "其他僵尸网络通信" => BoolQueryBuilder
/*** 封装查询条件* @param boolQueryBuilder* @param name 查询条件 如: src_ip.keyword : 192.168.31.1 and category.keyword : "其他僵尸网络通信"* @return*/private BoolQueryBuilder setSearchCondition(BoolQueryBuilder boolQueryBuilder, String name) {if (StringUtils.isNotEmpty(name)) {try {name = URLDecoder.decode(name, "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}String regex = "[ ](and|or)[ ]"; //数字的正则表达式String[] params = name.split(regex);//参数List<String> paramList = Arrays.asList(params);List<String> conditionList = new ArrayList<>();Pattern p = Pattern.compile("[ ](and|or)[ ]");Matcher m = p.matcher(name);while (m.find()) {conditionList.add(m.group(0));}if (paramList.size() == 1) { //只有一个查询条件时 直接按照 must 查询String param = paramList.get(0);QueryBuilder queryBuilder = getQueryBuilder(param);boolQueryBuilder.must(queryBuilder);} else {for (int i = 0; i < paramList.size(); i++) {if(i == 0){//第一个查询条件String firstParam = paramList.get(0);setCondition(boolQueryBuilder,firstParam,"and");}else{String nextParam = paramList.get(i);String condition = conditionList.get(i-1).trim();setCondition(boolQueryBuilder,nextParam,condition);}}}}return boolQueryBuilder;}/*** 封装查询条件* @param boolQueryBuilder* @param condition*/public void setCondition(BoolQueryBuilder boolQueryBuilder,String param, String condition){param = param.replace("\"","").replace("'","");RangeQueryBuilder rangeQueryBuilder = null;TermQueryBuilder termQueryBuilder = null;if (param.indexOf(">=") > 0) {String[] arr = param.split(">=");String key = arr[0].trim();String val = arr[1].trim();rangeQueryBuilder = QueryBuilders.rangeQuery(key);rangeQueryBuilder.gte(val);} else if (param.indexOf("<=") > 0) {String[] arr = param.split("<=");String key = arr[0].trim();String val = arr[1].trim();rangeQueryBuilder = QueryBuilders.rangeQuery(key);rangeQueryBuilder.lte(val);} else if (param.indexOf(">") > 0) {String[] arr = param.split(">");String key = arr[0].trim();String val = arr[1].trim();rangeQueryBuilder = QueryBuilders.rangeQuery(key);rangeQueryBuilder.gt(val);} else if (param.indexOf("<") > 0) {String[] arr = param.split("<");String key = arr[0].trim();String val = arr[1].trim();rangeQueryBuilder = QueryBuilders.rangeQuery(key);rangeQueryBuilder.lt(val);}else if(param.indexOf(":") > 0) {String[] arr = param.split(":");String key = arr[0].trim();String val = arr[1].trim();termQueryBuilder = QueryBuilders.termQuery(key, val);}if ("and".equalsIgnoreCase(condition)) {if(rangeQueryBuilder != null){boolQueryBuilder.must(rangeQueryBuilder);}else if(termQueryBuilder != null){boolQueryBuilder.must(termQueryBuilder);}} else if ("or".equalsIgnoreCase(condition)) {if(rangeQueryBuilder != null){boolQueryBuilder.should(rangeQueryBuilder);}else if(termQueryBuilder != null){boolQueryBuilder.should(termQueryBuilder);}}}
/*** 封装queryBuilder** @param param* @return*/public QueryBuilder getQueryBuilder(String param) {if (param.indexOf(">=") > 0) {String[] arr = param.split(">=");String key = arr[0].trim();String val = arr[1].trim();RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(key);rangeQueryBuilder.gte(val);return rangeQueryBuilder;} else if (param.indexOf("<=") > 0) {String[] arr = param.split("<=");String key = arr[0].trim();String val = arr[1].trim();RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(key);rangeQueryBuilder.lte(val);return rangeQueryBuilder;} else if (param.indexOf(">") > 0) {String[] arr = param.split(">");String key = arr[0].trim();String val = arr[1].trim();RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(key);rangeQueryBuilder.gt(val);return rangeQueryBuilder;} else if (param.indexOf("<") > 0) {String[] arr = param.split("<");String key = arr[0].trim();String val = arr[1].trim();RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(key);rangeQueryBuilder.lt(val);return rangeQueryBuilder;}String[] arr = param.split(":");String key = arr[0].trim();String val = arr[1].trim();BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();boolQueryBuilder.must(QueryBuilders.termQuery(key, val));return boolQueryBuilder;}
elk7.7.1【系列十六】java 封装 kql 查询条件相关推荐
- Java学习系列(十六)Java面向对象之基于TCP协议的网络通信
TCP/IP的网络分层模型:应用层(HTTP/FTP/SMTP/POPS...),传输层(TCP协议),网络层(IP协议,负责为网络上节点分配唯一标识),物理层+数据链路层). IP地址用于标识网络中 ...
- Java 基础系列(十六) --- Java中模板引擎的使用
模板引擎 1 关于动态页面的渲染 2 非模板引擎的弊端 3 模板引擎 3.1 什么是模板引擎? 3.2 Thymeleaf 语法 3.3 模板引擎的使用 4 总结 1 关于动态页面的渲染 渲染就是 ...
- 来自极客标签10款最新设计素材-系列十六
本周我们推荐来自极客标签社区带来的10款免费设计素材,大家可以在这里免费下载你需要的内容.如果你也有更好的作品,欢迎分享到社区中来,在得到帮助的同时,也能与更多人分享来自你的作品. 免费图标:扁平风格 ...
- 数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型
数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型 我们上次谈到用最大熵模型可以将各种信息综合在一起.我们留下一个问题没有回答,就是如何构造最大熵模型.我们已经所有的最大熵模型都 ...
- 数学之美 系列十六(上) 不要把所有的鸡蛋放在一个篮子里 -- 谈谈最大熵模型
数学之美 系列十六(上) 不要把所有的鸡蛋放在一个篮子里 -- 谈谈最大熵模型 [我们在投资时常常讲不要把所有的鸡蛋放在一个篮子里,这样可以降低风险.在信息处理中,这个原理同样适用.在数学上,这个原理 ...
- 数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型...
数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型 我们上次谈到用最大熵模型可以将各种信息综合在一起.我们留下一个问题没有回答,就是如何构造最大熵模型.我们已经所有的最大熵模型都 ...
- Java学习系列(十八)Java面向对象之基于UDP协议的网络通信
UDP协议:无需建立虚拟链路,协议是不可靠的. A节点以DatagramSocket发送数据包,数据报携带数据,数据报上还有目的目地地址,大部分情况下,数据报可以抵达:但有些情况下,数据报可能会丢失 ...
- S3C2416裸机开发系列十六_sd卡驱动实现
S3C2416裸机开发系列十六 sd卡驱动实现 象棋小子 1048272975 SD卡(Secure Digital Memory Card)具有体积小.容量大.数据传输快.可插拔.安全性好等优 ...
- 《SpringBoot系列十六》条件装配时ConfigurationCondition和Condition有什么区别?什么时候用ConfigurationCondition?
一.前言 针对条件装配我们讨论了如下内容: <SpringBoot系列十一>:精讲如何使用@Conditional系列注解做条件装配 <SpringBoot系列十二>:如何自定 ...
最新文章
- 计算机及网络技术发展趋势,网络技术发展对计算机技术的影响
- 手机端设置https访问代理(windows)
- 网页上有错误(类不能支持 Automation 操作)解决方法
- 高效终端设备视觉系统开发与优化
- 单链表的按位置插入和删除
- 1028: [JSOI2007]麻将
- 统计MOOC证书 (15 分)
- C语言实现贪吃蛇(简易)
- EasyRecovery注册码哪里有?
- 项目配置urule规则引擎教程详解(带视频资源)
- 视频教程:小型登陆系统(完)
- 用虚拟鸭子CYBERDUCK同步RACKSPACE CLOUD文件
- java基础知识面试题(41-95)
- 从程序员的角度分析微信小程序(编程语言:用到什么学什么)
- window7 安装TortoiseGit没有git.exe 和 右键没有clone等按钮解决方法
- 【开源】SoDiaoEditor 可能是目前最好用的开源电子病历编辑器(B/S架构)
- 针对有APP签名的系统中,短信不能收发的问题解决过程
- 生产者和消费者问题-----管程法
- context.Context
- GNN GCN和GAT