直接上代码:

最重要的是esbuilder中的文件,其中包括es四大查询模式构建工具类,一个查询模式定义文件,一个构建工厂类,一个最终拼装类。使用了简单工厂设计模式加反射。

下面是各个文件的具体代码:

IESQueryBuilders:

public interface IESQueryBuilders {IESQueryBuilders termQuery(String name, String... valve) throws  Exception;IESQueryBuilders wildcardQuery(String name, String... values) throws Exception;IESQueryBuilders rangeQuery(String name, String from, String to) throws Exception;BoolQueryBuilder getBoolQueryBuilder();
}

ESMust:

public class ESMust implements IESQueryBuilders {private BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();@Overridepublic BoolQueryBuilder getBoolQueryBuilder() {return boolQueryBuilder;}@Overridepublic ESMust termQuery(String name, String... values)  throws Exception {boolQueryBuilder.must(QueryBuilders.termsQuery(name, values));return this;}@Overridepublic ESMust wildcardQuery(String name, String... values)  throws Exception{for (String value : values){boolQueryBuilder.must(QueryBuilders.wildcardQuery(name, "*" + value + "*"));}return this;}@Overridepublic ESMust rangeQuery(String name, String from, String to) throws Exception {boolQueryBuilder.must(QueryBuilders.rangeQuery(name).from(from, true).to(to, true));return this;}
}

ESMustNot:

public class ESMustNot implements IESQueryBuilders {private BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();@Overridepublic BoolQueryBuilder getBoolQueryBuilder() {return boolQueryBuilder;}@Overridepublic ESMustNot termQuery(String name, String... values)  throws Exception {boolQueryBuilder.mustNot(QueryBuilders.termQuery(name, values));return this;}@Overridepublic ESMustNot wildcardQuery(String name, String... values) throws Exception {for (String value : values){boolQueryBuilder.mustNot(QueryBuilders.wildcardQuery(name, "*" + value + "*"));}return this;}@Deprecatedpublic ESMustNot rangeQuery(String name, String from, String to) throws Exception {return null;}
}

ESShould:

public class ESShould implements IESQueryBuilders {private BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();@Overridepublic BoolQueryBuilder getBoolQueryBuilder() {return boolQueryBuilder;}@Overridepublic ESShould termQuery(String name, String... values) throws Exception {boolQueryBuilder.should(QueryBuilders.termsQuery(name, values));return this;}@Overridepublic ESShould wildcardQuery(String name, String... values) throws Exception {for (String value : values){boolQueryBuilder.should(QueryBuilders.wildcardQuery(name, "*" + value + "*"));}return this;}@Deprecatedpublic ESShould rangeQuery(String name, String from, String to) throws Exception {return null;}
}

ESFilter:

public class ESFilter implements IESQueryBuilders {private BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();@Overridepublic BoolQueryBuilder getBoolQueryBuilder() {return boolQueryBuilder;}@Overridepublic ESFilter termQuery(String name, String... values) throws Exception {boolQueryBuilder.filter(QueryBuilders.termsQuery(name, values));return this;}@Overridepublic ESFilter wildcardQuery(String name, String... values) throws Exception {for (String value : values){boolQueryBuilder.filter(QueryBuilders.wildcardQuery(name, "*" + value + "*"));}return this;}@Deprecatedpublic ESFilter rangeQuery(String name, String from, String to) throws Exception {return null;}
}

ESQueryMode:

public enum ESQueryMode implements Serializable{MUST("com.example.esbuilder.ESMust"),MUST_NOT("com.example.esbuilder.ESMustNot"),SHOULD("com.example.esbuilder.ESShould"),FILTER("com.example.esbuilder.ESFilter");private String mode;ESQueryMode(String mode) {this.mode = mode;}public String mode() {return mode;}
}

ESQueryBuilderFactory:

public class ESQueryBuilderFactory {public static IESQueryBuilders creatESQueryBuilder(ESQueryMode mode) throws ClassNotFoundException, IllegalAccessException, InstantiationException {Class<?> clazz = Class.forName(mode.mode());return (IESQueryBuilders) clazz.newInstance();}
}

ESQueryProduce:

public class ESQueryProduce implements IESQueryProduce {private BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();@Overridepublic BoolQueryBuilder getBoolQueryBuilder() {return boolQueryBuilder;}@Overridepublic IESQueryProduce getProduct(IESQueryBuilders esQueryBuilders) {boolQueryBuilder.must(esQueryBuilders.getBoolQueryBuilder());return this;}
}

然后就能自由的拼接复杂的es查询语句了。

比如:

IESQueryBuilders must = ESQueryBuilderFactory.creatESQueryBuilder(ESQuaryMode.MUST);
must.termQuery("termName", "value1","value1");
must.wildcardQuery("wildName","value1");IESQueryBuilders should = ESQueryBuilderFactory.creatESQueryBuilder(ESQuaryMode.SHOULD);
should.wildcardQuery("wildName", "value1","value2");BoolQueryBuilder boolQueryBuilder = esQueryProduce.getProduct(must).getProduct(should).getBoolQueryBuilder();

然后把最终生成的boolQueryBuilder放在SearchRequestBuilder中查询就可以了。

转载请注明出处:https://blog.csdn.net/wanglc7/article/details/80351551,谢谢。

ElasticSearch5.4X 搜索引擎查询java工具类相关推荐

  1. elasticsearch搜索引擎查询java工具类

    Elasticsearch查询java工具类 项目组使用Elasticsearch搜索引擎也有一段时间了,刚开始是2.4版本,现在又要在新的工程中使用,准备升级为5.4版本,以前的工具类也不好用了,没 ...

  2. 干货:排名前 16 的 Java 工具类!

    2019独角兽企业重金招聘Python工程师标准>>> 干货:排名前 16 的 Java 工具类!   在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最 ...

  3. beanutils工具类_16 个超级实用的 Java 工具类!

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...

  4. java轻量级并行工具类_16 个超级实用的 Java 工具类

    原标题:16 个超级实用的 Java 工具类 源 /juejin 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名, ...

  5. java 文本工具类_干货:排名前16的Java工具类

    原标题:干货:排名前16的Java工具类 作者丨Java技术栈 https://www.jianshu.com/p/9e937d178203 在Java中,工具类定义了一组公共方法,这篇文章将介绍Ja ...

  6. 干货:排名前16的Java工具类

    image 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源 ...

  7. 排名前16的Java工具类

    原文:https://www.jianshu.com/p/9e937d178203 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法 ...

  8. java 工具类命名_给大家详解16个超级实用的Java工具类

    在Java中,工具类定义了一组公共方法,这篇文章课工场合肥北大青鸟科海校区的袁老师将介绍Java中使用最频繁及最通用的Java工具类,希望对大家有所帮助. 以下工具类.方法按使用流行度排名,参考数据来 ...

  9. java 类型转换 效率_盘点16个有用的Java工具类,显著提升工作效率!

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...

最新文章

  1. RoI Pooling 与 RoI Align 有什么区别?
  2. python使用matplotlib, seaborn画图时候的数据加载
  3. 挑战杯科展上的智能车作品
  4. 使用 Equinox 开发 OSGi 应用程序
  5. 苹果下架360的硅谷解读
  6. 工作101:列表村放在tabledata找父组件取值
  7. 越狱后必装软件_iOS 13全系统越狱详细教程疑难解答
  8. OPhone的多媒体模块支持的三种不同数据源
  9. 一个简单帆软报表制作基础步骤
  10. windows系统下进入jupyter本地服务器(localhost)的步骤
  11. ElasticSearch常用语法大全
  12. 华为路由器Serial接口及串口无法实现ACL访问控制解析
  13. css中鼠标变成手型设置
  14. 获取当前日期的上一个月和后三个月。
  15. Java基础(32)
  16. 百度数据实习生面试经历—2019.4.15
  17. BRD文件转AD文件
  18. 江苏计算机二级24c语言,闽高校计算机等级考试信息技术选择题(含问题详解)确定书中页码版.doc...
  19. Car-eye JT/T1078 视频服务器开发过程中的音频处理
  20. CocoaPods could not find compatible versions for pod “JCore“

热门文章

  1. 小程序分享到朋友圈功能_小程序开发日记 分享到朋友圈
  2. 11.* 指针 引用
  3. 一切事物皆对象_基础篇
  4. SQLite的基本用法
  5. Swift -- 7.3 类和结构体
  6. 自己封装的ASP.NET的SQLITE数据库的操作类
  7. BLIP:用更干净更多样的数据进行多模态预训练,性能超越CLIP!代码已开源!...
  8. ECCV 2020 论文大盘点-自动驾驶篇
  9. 手写及场景文字分析与识别的一些新尝试
  10. ECCV 2020 论文大盘点-人脸技术篇