ElasticSearch5.4X 搜索引擎查询java工具类
直接上代码:
最重要的是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工具类相关推荐
- elasticsearch搜索引擎查询java工具类
Elasticsearch查询java工具类 项目组使用Elasticsearch搜索引擎也有一段时间了,刚开始是2.4版本,现在又要在新的工程中使用,准备升级为5.4版本,以前的工具类也不好用了,没 ...
- 干货:排名前 16 的 Java 工具类!
2019独角兽企业重金招聘Python工程师标准>>> 干货:排名前 16 的 Java 工具类! 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最 ...
- beanutils工具类_16 个超级实用的 Java 工具类!
在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...
- java轻量级并行工具类_16 个超级实用的 Java 工具类
原标题:16 个超级实用的 Java 工具类 源 /juejin 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名, ...
- java 文本工具类_干货:排名前16的Java工具类
原标题:干货:排名前16的Java工具类 作者丨Java技术栈 https://www.jianshu.com/p/9e937d178203 在Java中,工具类定义了一组公共方法,这篇文章将介绍Ja ...
- 干货:排名前16的Java工具类
image 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源 ...
- 排名前16的Java工具类
原文:https://www.jianshu.com/p/9e937d178203 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法 ...
- java 工具类命名_给大家详解16个超级实用的Java工具类
在Java中,工具类定义了一组公共方法,这篇文章课工场合肥北大青鸟科海校区的袁老师将介绍Java中使用最频繁及最通用的Java工具类,希望对大家有所帮助. 以下工具类.方法按使用流行度排名,参考数据来 ...
- java 类型转换 效率_盘点16个有用的Java工具类,显著提升工作效率!
在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...
最新文章
- RoI Pooling 与 RoI Align 有什么区别?
- python使用matplotlib, seaborn画图时候的数据加载
- 挑战杯科展上的智能车作品
- 使用 Equinox 开发 OSGi 应用程序
- 苹果下架360的硅谷解读
- 工作101:列表村放在tabledata找父组件取值
- 越狱后必装软件_iOS 13全系统越狱详细教程疑难解答
- OPhone的多媒体模块支持的三种不同数据源
- 一个简单帆软报表制作基础步骤
- windows系统下进入jupyter本地服务器(localhost)的步骤
- ElasticSearch常用语法大全
- 华为路由器Serial接口及串口无法实现ACL访问控制解析
- css中鼠标变成手型设置
- 获取当前日期的上一个月和后三个月。
- Java基础(32)
- 百度数据实习生面试经历—2019.4.15
- BRD文件转AD文件
- 江苏计算机二级24c语言,闽高校计算机等级考试信息技术选择题(含问题详解)确定书中页码版.doc...
- Car-eye JT/T1078 视频服务器开发过程中的音频处理
- CocoaPods could not find compatible versions for pod “JCore“