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 查询条件相关推荐

  1. Java学习系列(十六)Java面向对象之基于TCP协议的网络通信

    TCP/IP的网络分层模型:应用层(HTTP/FTP/SMTP/POPS...),传输层(TCP协议),网络层(IP协议,负责为网络上节点分配唯一标识),物理层+数据链路层). IP地址用于标识网络中 ...

  2. Java 基础系列(十六) --- Java中模板引擎的使用

    模板引擎 1 关于动态页面的渲染 2 非模板引擎的弊端 3 模板引擎 3.1 什么是模板引擎? 3.2 Thymeleaf 语法 3.3 模板引擎的使用 4 总结 1 关于动态页面的渲染   渲染就是 ...

  3. 来自极客标签10款最新设计素材-系列十六

    本周我们推荐来自极客标签社区带来的10款免费设计素材,大家可以在这里免费下载你需要的内容.如果你也有更好的作品,欢迎分享到社区中来,在得到帮助的同时,也能与更多人分享来自你的作品. 免费图标:扁平风格 ...

  4. 数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型

    数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型 我们上次谈到用最大熵模型可以将各种信息综合在一起.我们留下一个问题没有回答,就是如何构造最大熵模型.我们已经所有的最大熵模型都 ...

  5. 数学之美 系列十六(上) 不要把所有的鸡蛋放在一个篮子里 -- 谈谈最大熵模型

    数学之美 系列十六(上) 不要把所有的鸡蛋放在一个篮子里 -- 谈谈最大熵模型 [我们在投资时常常讲不要把所有的鸡蛋放在一个篮子里,这样可以降低风险.在信息处理中,这个原理同样适用.在数学上,这个原理 ...

  6. 数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型...

    数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型 我们上次谈到用最大熵模型可以将各种信息综合在一起.我们留下一个问题没有回答,就是如何构造最大熵模型.我们已经所有的最大熵模型都 ...

  7. Java学习系列(十八)Java面向对象之基于UDP协议的网络通信

    UDP协议:无需建立虚拟链路,协议是不可靠的. A节点以DatagramSocket发送数据包,数据报携带数据,数据报上还有目的目地地址,大部分情况下,数据报可以抵达:但有些情况下,数据报可能会丢失 ...

  8. S3C2416裸机开发系列十六_sd卡驱动实现

    S3C2416裸机开发系列十六 sd卡驱动实现 象棋小子    1048272975 SD卡(Secure Digital Memory Card)具有体积小.容量大.数据传输快.可插拔.安全性好等优 ...

  9. 《SpringBoot系列十六》条件装配时ConfigurationCondition和Condition有什么区别?什么时候用ConfigurationCondition?

    一.前言 针对条件装配我们讨论了如下内容: <SpringBoot系列十一>:精讲如何使用@Conditional系列注解做条件装配 <SpringBoot系列十二>:如何自定 ...

最新文章

  1. 计算机及网络技术发展趋势,网络技术发展对计算机技术的影响
  2. 手机端设置https访问代理(windows)
  3. 网页上有错误(类不能支持 Automation 操作)解决方法
  4. 高效终端设备视觉系统开发与优化
  5. 单链表的按位置插入和删除
  6. 1028: [JSOI2007]麻将
  7. 统计MOOC证书 (15 分)
  8. C语言实现贪吃蛇(简易)
  9. EasyRecovery注册码哪里有?
  10. 项目配置urule规则引擎教程详解(带视频资源)
  11. 视频教程:小型登陆系统(完)
  12. 用虚拟鸭子CYBERDUCK同步RACKSPACE CLOUD文件
  13. java基础知识面试题(41-95)
  14. 从程序员的角度分析微信小程序(编程语言:用到什么学什么)
  15. window7 安装TortoiseGit没有git.exe 和 右键没有clone等按钮解决方法
  16. 【开源】SoDiaoEditor 可能是目前最好用的开源电子病历编辑器(B/S架构)
  17. 针对有APP签名的系统中,短信不能收发的问题解决过程
  18. 生产者和消费者问题-----管程法
  19. context.Context
  20. GNN GCN和GAT

热门文章

  1. postman模拟并发请求
  2. OpenPose(一):根据关键点生成置信图(Confidence Map)
  3. 洛谷P3354 [IOI2005]Riv 河流——“承诺”DP
  4. 数据库课程设计 人事管理系统
  5. 无监督学习之聚类方法
  6. 支付平台服务器被攻击怎么应对?
  7. 多线程(一) 线程概念及创建线程的方法
  8. 玩游戏4g计算机的内存不足,别再说内存不足了!教你一招彻底解决,电脑运行加速3倍!...
  9. 环境搭建--谷粒商城笔记一
  10. 江西省信息技术知识竞赛题库