Elasticsearch7.3在java中的简单连接
发布日期:2021-06-29 13:43:40 浏览次数:2 分类:技术文章

本文共 4171 字,大约阅读时间需要 13 分钟。

上周我们新项目的开发使用的检索引擎确定为Elasticsearch7.3.1,伴随着好奇心我赶快查查这个版本ES的入坑率。

开心,ES7.3.1版本的发布周期还不到10天,设计人员简直是神仙!

心中一顿happy乱喷后,赶快上网搜索了一番ES7.3的java开发说明。由于之前用过ES1和ES5版本,知道小版本之间的API应该是通用的,会不会大版本间也能通用呢?

很显然,如果通用我就不写这篇入坑指南了。

之前我们用的一直是Spring追踪更新的transport包(如下图)

但很可惜,当前最新的Spring-elastiscsearch只更新到ES6.7,ES7不能使。唉,赶快找其他的小厂家插件。。后来找到了款ES7官网API推荐的包elasticsearch-rest-high-level-client,废话不多说,进入快速入门模式——>

1.引入高版本jar

如下图,ES7.x都有相应包,修改版本号即可

org.elasticsearch
elasticsearch
7.3.1
org.elasticsearch.client
elasticsearch-rest-high-level-client
7.3.1

2.编写demo代码

这里由于不是Spring的包,不需要加什么xml配置文件了,直接使用即可,啥都不说了,都在代码里了!仔细阅读下方的注释,我就不在这里多BB了(划重点)

/**     * 查询phoneList     * @param     * @return     */    @RequestMapping(value = "/selPhoneList", produces = "text/html;charset=UTF-8")    @ResponseBody    public JSONObject selPhoneList(String jmpt_name, String mobileLocation, String pageSize, String currentPage) {                // 引入client,配置按各自修改        RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("127.0.0.1", "9200", "http")));    	JSONObject resJSON = new JSONObject();    	JSONArray jsonArr = new JSONArray();    	int currentPageInt = 0;    	int pageSizeInt = 10;        // 提取分页参数        if (jmpt_name == null || "undefined".equals(jmpt_name)) {            jmpt_name = "";        }        if (mobileLocation == null || "undefined".equals(mobileLocation)) {            mobileLocation = "";        }        if (pageSize != null && !"".equals(pageSize)) {            pageSizeInt = Integer.parseInt(pageSize);        }        if (currentPage != null && !"".equals(currentPage)) {            currentPageInt = Integer.parseInt(currentPage) * pageSizeInt;        }                // 查询流程***(重要):子查询对象(QueryBuilder)-->父查询对象(BoolQueryBuilder)-->查询函数构造对象(SearchSourceBuilder)-->请求发起对象(SearchRequest )-->发起请求-->返回结果(SearchResponse)        // 创建父查询对象        BoolQueryBuilder srBuilder = QueryBuilders.boolQuery();        // 创建子查询对象        QueryBuilder jmpt_nameBuilder = null;        QueryBuilder locationBuilder = null;        // 创建查询函数构造对象        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();        System.out.println("打印提交的DSL语句:sourceBuilder--:" + sourceBuilder);        // 参数注入到        if (!"".equals(jmpt_name)){            jmpt_nameBuilder = QueryBuilders.queryStringQuery(jmpt_name).field("jmpt_name");// 根据字段平台名称(jmpt_name)进行查询            srBuilder.must(jmpt_nameBuilder);//子查询对象放入父查询对象中        }        if (!"".equals(mobileLocation)){            locationBuilder = QueryBuilders.queryStringQuery(mobileLocation).field("provience");// 根据字段省份(field:provience)进行查询            srBuilder.must(locationBuilder);//子查询对象放入父查询对象中        }        sourceBuilder.query(srBuilder); // 把父查询对象放入函数构造对象中        sourceBuilder.from(currentPageInt); // 参数范围起        sourceBuilder.size(pageSizeInt); // 参数范围始        sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));// 设置超时时间        sourceBuilder.trackTotalHits(true); // 取消默认最大查询数量上限(默认10000)        // 构造 请求发起对象        SearchRequest searchRequest = new SearchRequest("phone");// 这里直接配置索引名即可        // searchRequest.indices("phone");        searchRequest.source(sourceBuilder);// 把查询函数构造对象注入查询请求中        SearchResponse searchResponse;// 创建响应对象        SearchHits searchHits = null;        try {            searchResponse = this.client.search(searchRequest,RequestOptions.DEFAULT);            searchHits =  searchResponse.getHits();//获取响应中的列表数据            String total = searchHits.getTotalHits().value;//获取响应中的列表数据总数            for(SearchHit hit:searchHits.getHits()){// 遍历构造返回JSON,以下不再多说                JSONObject dataJSON = new JSONObject();                String tempRes = hit.getSourceAsString();                dataJSON = JSONObject.parseObject(tempRes);                jsonArr.add(dataJSON);            }            resJSON.put("resArr", jsonArr);            resJSON.put("total", total);        } catch (IOException e) {            e.printStackTrace();        }        return resJSON;    }

好了,上面是最基本的一个查询方式demo,其他的查询需要不同的父查询函数,后面我会继续更新。

如果出现问题请在下方及时留言

转载地址:https://chensj.blog.csdn.net/article/details/100184820 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:已解决:No 'Access-Control-Allow-Origin' header is present on the requested resource'(跨域问题)
下一篇:xcode-select: error: tool 'xcodebuild' requires Xcode

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月12日 13时45分41秒