Elasticsearch学习2 SpringBoot整合 测试复杂检索

五、SpringBoot整合

选择Java High Level REST Client

官方文档:Java REST Client [7.17] | Elastic]

1.基本步骤

导入依赖rest-high-level-client

<dependency>
     <groupId>org.elasticsearch.client</groupId>
     <artifactId>elasticsearch-rest-high-level-client</artifactId>
     <version>7.4.2</version>
</dependency>

由于springboot对elasticsearch有默认版本管理,

image-20220713085745497

所以我们修改一下springboot的默认配置

image-20220713085821223

编写配置类

package com.henu.soft.merist.search.config;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class GulimallElasticSearchConfig {
    //可以构建授权请求头信息
    public static final RequestOptions COMMON_OPTIONS;
	static {
    	RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
   		/*builder.addHeader("Authorization", "Bearer " + TOKEN); 
    	builder.setHttpAsyncResponseConsumerFactory(           
        	new HttpAsyncResponseConsumerFactory
            	.HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));*/
    	COMMON_OPTIONS = builder.build();
	}
    
    @Bean
    public RestHighLevelClient esRestClient(){
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("IP/localhost", 9200, "http")));
        return client;
    }
}

2.保存数据

首先导包 用来将数据转成json

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>2.0.9</version>
</dependency>
 /**
     * 测试保存数据
     */
    @Test
    public void indexData() throws IOException {
        //新建一个索引来保存数据
        IndexRequest indexRequest = new IndexRequest("games");
        indexRequest.id("1");

        Game game = new Game();
        game.setName("杀戮尖塔");
        game.setType("卡牌肉鸽");
        game.setGrade(100);
        String jsonString = JSON.toJSONString(game);

        indexRequest.source(jsonString,XContentType.JSON);

        IndexResponse reponse = client.index(indexRequest, GulimallElasticSearchConfig.COMMON_OPTIONS);
        System.out.println(reponse);
        System.out.println(reponse.toString());

    }

    @Data
    class Game{
        private String name;
        private String type;
        private Integer grade;
    }

image-20220713121138880

image-20220713121148256

3.测试复杂检索

@Test
    public void searchData() throws IOException {
        //1.创建检索请求
        SearchRequest searchRequest = new SearchRequest();

        //2.指定索引
        searchRequest.indices("bank");

        //3.查询条件构建
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //3.1查询
        //各种根操作都能在查询条件种创建
//        searchSourceBuilder.from();
//        searchSourceBuilder.size();
//        searchSourceBuilder.timeout();
        searchSourceBuilder.query(QueryBuilders.matchAllQuery());

        //3.2聚合

        //按照年龄值分布聚合
        TermsAggregationBuilder agaAgg = AggregationBuilders.terms("agaAgg").field("aga").size(10);
        searchSourceBuilder.aggregation(agaAgg);

        //按照薪资聚合求均值
        TermsAggregationBuilder balanceAgg = AggregationBuilders.terms("balanceAgg").field("balance").size(10);
        searchSourceBuilder.aggregation(balanceAgg);

        //4.组合查询条件
        searchRequest.source(searchSourceBuilder);

        //5.执行查询
        SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);

        //6.解析结果(Hits 和 聚合的值)
        //6.1获取所有查到的数据
        //拿到外边的hits
        SearchHits hits = response.getHits();
        //拿到里面的hits
        SearchHit[] dataHits = hits.getHits();

        for (SearchHit dataHit : dataHits) {
            String id = dataHit.getId();
            String index = dataHit.getIndex();
            float score = dataHit.getScore();
            String type = dataHit.getType();
            long seqNo = dataHit.getSeqNo();
            //也可以直接将返回的json数据转成map输出
            Map<String, Object> sourceAsMap = dataHit.getSourceAsMap();

            System.out.println(id+"---"+index+"---"+score+"---"+type+"---"+seqNo);
            System.out.println(sourceAsMap);
        }

        System.out.println(response);

    }

查询的数据

1---bank------account----2
{account_number=1, firstname=Amber, address=880 Holmes Lane, balance=39225, gender=M, city=Brogan, employer=Pyrami, state=IL, age=32, email=amberduke@pyrami.com, lastname=Duke}
6---bank------account----2
{account_number=6, firstname=Hattie, address=671 Bristol Street, balance=5686, gender=M, city=Dante, employer=Netagy, state=TN, age=36, email=hattiebond@netagy.com, lastname=Bond}
13---bank------account----2
{account_number=13, firstname=Nanette, address=789 Madison Street, balance=32838, gender=F, city=Nogal, employer=Quility, state=VA, age=28, email=nanettebates@quility.com, lastname=Bates}
18---bank------account----2
{account_number=18, firstname=Dale, address=467 Hutchinson Court, balance=4180, gender=M, city=Orick, employer=Boink, state=MD, age=33, email=daleadams@boink.com, lastname=Adams}
20---bank------account----2
{account_number=20, firstname=Elinor, address=282 Kings Place, balance=16418, gender=M, city=Ribera, employer=Scentric, state=WA, age=36, email=elinorratliff@scentric.com, lastname=Ratliff}
25---bank------account----2
{account_number=25, firstname=Virginia, address=171 Putnam Avenue, balance=40540, gender=F, city=Nicholson, employer=Filodyne, state=PA, age=39, email=virginiaayala@filodyne.com, lastname=Ayala}
32---bank------account----2
{account_number=32, firstname=Dillard, address=702 Quentin Street, balance=48086, gender=F, city=Veguita, employer=Quailcom, state=IN, age=34, email=dillardmcpherson@quailcom.com, lastname=Mcpherson}
37---bank------account----2
{account_number=37, firstname=Mcgee, address=826 Fillmore Place, balance=18612, gender=M, city=Tooleville, employer=Reversus, state=OK, age=39, email=mcgeemooney@reversus.com, lastname=Mooney}
44---bank------account----2
{account_number=44, firstname=Aurelia, address=502 Baycliff Terrace, balance=34487, gender=M, city=Yardville, employer=Orbalix, state=DE, age=37, email=aureliaharding@orbalix.com, lastname=Harding}
49---bank------account----2
{account_number=49, firstname=Fulton, address=451 Humboldt Street, balance=29104, gender=F, city=Sunriver, employer=Anocha, state=RI, age=23, email=fultonholt@anocha.com, lastname=Holt}
{"took":62,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":1000,"relation":"eq"},"max_score":1.0,"hits":[{"_index":"bank","_type":"account","_id":"1","_score":1.0,"_source":{"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"amberduke@pyrami.com","city":"Brogan","state":"IL"}},{"_index":"bank","_type":"account","_id":"6","_score":1.0,"_source":{"account_number":6,"balance":5686,"firstname":"Hattie","lastname":"Bond","age":36,"gender":"M","address":"671 Bristol Street","employer":"Netagy","email":"hattiebond@netagy.com","city":"Dante","state":"TN"}},{"_index":"bank","_type":"account","_id":"13","_score":1.0,"_source":{"account_number":13,"balance":32838,"firstname":"Nanette","lastname":"Bates","age":28,"gender":"F","address":"789 Madison Street","employer":"Quility","email":"nanettebates@quility.com","city":"Nogal","state":"VA"}},{"_index":"bank","_type":"account","_id":"18","_score":1.0,"_source":{"account_number":18,"balance":4180,"firstname":"Dale","lastname":"Adams","age":33,"gender":"M","address":"467 Hutchinson Court","employer":"Boink","email":"daleadams@boink.com","city":"Orick","state":"MD"}},{"_index":"bank","_type":"account","_id":"20","_score":1.0,"_source":{"account_number":20,"balance":16418,"firstname":"Elinor","lastname":"Ratliff","age":36,"gender":"M","address":"282 Kings Place","employer":"Scentric","email":"elinorratliff@scentric.com","city":"Ribera","state":"WA"}},{"_index":"bank","_type":"account","_id":"25","_score":1.0,"_source":{"account_number":25,"balance":40540,"firstname":"Virginia","lastname":"Ayala","age":39,"gender":"F","address":"171 Putnam Avenue","employer":"Filodyne","email":"virginiaayala@filodyne.com","city":"Nicholson","state":"PA"}},{"_index":"bank","_type":"account","_id":"32","_score":1.0,"_source":{"account_number":32,"balance":48086,"firstname":"Dillard","lastname":"Mcpherson","age":34,"gender":"F","address":"702 Quentin Street","employer":"Quailcom","email":"dillardmcpherson@quailcom.com","city":"Veguita","state":"IN"}},{"_index":"bank","_type":"account","_id":"37","_score":1.0,"_source":{"account_number":37,"balance":18612,"firstname":"Mcgee","lastname":"Mooney","age":39,"gender":"M","address":"826 Fillmore Place","employer":"Reversus","email":"mcgeemooney@reversus.com","city":"Tooleville","state":"OK"}},{"_index":"bank","_type":"account","_id":"44","_score":1.0,"_source":{"account_number":44,"balance":34487,"firstname":"Aurelia","lastname":"Harding","age":37,"gender":"M","address":"502 Baycliff Terrace","employer":"Orbalix","email":"aureliaharding@orbalix.com","city":"Yardville","state":"DE"}},{"_index":"bank","_type":"account","_id":"49","_score":1.0,"_source":{"account_number":49,"balance":29104,"firstname":"Fulton","lastname":"Holt","age":23,"gender":"F","address":"451 Humboldt Street","employer":"Anocha","email":"fultonholt@anocha.com","city":"Sunriver","state":"RI"}}]},"aggregations":{"lterms#balanceAgg":{"doc_count_error_upper_bound":0,"sum_other_doc_count":985,"buckets":[{"key":22026,"doc_count":2},{"key":23285,"doc_count":2},{"key":36038,"doc_count":2},{"key":39063,"doc_count":2},{"key":45493,"doc_count":2},{"key":1011,"doc_count":1},{"key":1031,"doc_count":1},{"key":1110,"doc_count":1},{"key":1133,"doc_count":1},{"key":1172,"doc_count":1}]},"sterms#agaAgg":{"doc_count_error_upper_bound":0,"sum_other_doc_count":0,"buckets":[]}}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HotRabbit.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值