Elasticsearch7.3在java中的简单连接

上周我们新项目的开发使用的检索引擎确定为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都有相应包,修改版本号即可

<!-- https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch -->
	  <dependency>
		  <groupId>org.elasticsearch</groupId>
		  <artifactId>elasticsearch</artifactId>
		  <version>7.3.1</version>
	  </dependency>
      <dependency>
          <groupId>org.elasticsearch.client</groupId>
          <artifactId>elasticsearch-rest-high-level-client</artifactId>
          <version>7.3.1</version>
      </dependency>

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,其他的查询需要不同的父查询函数,后面我会继续更新。

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

发布了56 篇原创文章 · 获赞 143 · 访问量 7万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览