栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot2.2.X整合ElasricSearch7.8

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot2.2.X整合ElasricSearch7.8

这里默认大家已经掌握es基础语法 es版本为7.8
pom

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

properties配置文件

# 应用名称
spring.application.name=search
# 应用服务 WEB 访问端口
server.port=12000
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

配置类

@Configuration
public class StaticSearchConfig {

    public static final RequestOptions COMMOM_OPTIONS;
    static {
        RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
        COMMOM_OPTIONS=builder.build();
    }

    @Bean
    public RestHighLevelClient esRestClient(){
        return new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",1001,"http")
        ));
    }

}

单元测试

添加数据

    @Autowired
    private RestHighLevelClient esRestClient;
     @Test
    public void testEsClient() throws IOException {
        IndexRequest indexRequest = new IndexRequest();
        indexRequest.id("1");
        indexRequest.index("bank");
        indexRequest.source("username","zhangsan","age",19);
        //添加数据     请求参数使用默认的
        esRestClient.index(indexRequest, RequestOptions.DEFAULT);
    }

检索数据

 
    @Test
    public void testEsSearch() throws IOException {
        SearchRequest searchRequest = new SearchRequest();
        //指定查询索引
        searchRequest.indices("bank");
        SearchSourceBuilder builder = new SearchSourceBuilder();
        //查询所有address中带有mill的
        builder.query(QueryBuilders.matchQuery("address","mill"));

        //构造聚合条件 terms为聚合条件的名字  根据age聚合  size 显示多少条
        TermsAggregationBuilder aggregationBuilder1 = AggregationBuilders.terms("aggAgg").field("age").size(10);
        //添加聚合条件
        builder.aggregation(aggregationBuilder1);
        //聚合条件二  聚合名称为balanceAvg   根据balance求平均值
        AvgAggregationBuilder aggregationBuilder2 = AggregationBuilders.avg("balanceAvg").field("balance");
        //添加聚合条件二
        builder.aggregation(aggregationBuilder2);
        System.out.println(builder.toString());
        searchRequest.source(builder);
        //执行检索
        SearchResponse searchResponse = esRestClient.search(searchRequest,     StaticSearchConfig.COMMOM_OPTIONS);
        System.out.println(searchResponse);
        //分析结果
            //获取所有查到的数据   所有命中数据  最外层
        SearchHits hits = searchResponse.getHits();
            //获取所有响应数据中的命中数据  内层hits
        SearchHit[] hitsHits = hits.getHits();
        for (SearchHit hitsHit : hitsHits) {
            //遍历每条数据   获取索引
            String index = hitsHit.getIndex();
            long primaryTerm = hitsHit.getPrimaryTerm();
            System.out.println(index +" " +primaryTerm);
//            Map sourceAsMap = hitsHit.getSourceAsMap();
//            Set> entries = sourceAsMap.entrySet();
//            for (Map.Entry entry : entries) {
//                System.out.println(entry.getKey());
//                System.out.println(entry.getValue());
//            }
            String sourceAsString = hitsHit.getSourceAsString();
           	//Account类为自己创建pojo类
            Account account = JSON.parseObject(sourceAsString, Account.class);
            System.out.println(account);
            //分析聚合结果  获取所有聚合数据
            Aggregations aggregations = searchResponse.getAggregations();
              //根据聚合的名字取出聚合信息
            Terms aggAgg = aggregations.get("aggAgg");
            Avg balanceAvg = aggregations.get("balanceAvg");
            for (Terms.Bucket bucket : aggAgg.getBuckets()) {
                System.out.println("年龄:"+bucket.getKey()+"------->人数:"+bucket.getDocCount());
            }
            System.out.println(balanceAvg.getName()+"平均工资---->"+balanceAvg.getValue());
        }

    }

部分结果

MallSearchApplicationTests.Account(account_number=472, balance=25571, firstname=Lee, lastname=Long, age=32, gender=F, address=288 Mill Street, employer=Comverges, email=leelong@comverges.com, city=Movico, state=MT)
年龄:38------->人数:2
年龄:28------->人数:1
年龄:32------->人数:1
balanceAvg平均工资---->25208.0
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1002585.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号