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

springboot 整合ES

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

springboot 整合ES

pringboot整个es有四种方法,分别是TransportClient、RestClient、SpringData-Es、Elasticsearch-SQL。

官方推荐的是RestClient

1 引入依赖

创建SpringBoot工程,引入依赖,在spring-boot-dependencies中所依赖的ES版本位可能不一致,要改掉


    1.8
    7.4.2




    org.elasticsearch.client
    elasticsearch-rest-high-level-client
    ${elasticsearch.version}

2 编写配置类
@Configuration
public class RestClientConfig {

    @Bean
    public RestHighLevelClient restHighLevelClient() {
        // 如果有多个从节点可以持续在内部new多个HttpHost,参数1是IP,参数2是端口,参数3是通信协议
        return new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
    }
}
3 测试 1.1 添加文档
@Test
public void indexData() throws IOException {
    // IndexRequest
    IndexRequest indexRequest = new IndexRequest("users");
    User user = new User();
    user.setUserName("张三");
    user.setAge(20);
    user.setGender("男");
    String source = JSON.toJSONString(user);
    indexRequest.id("1").source(source, XContentType.JSON);
    // 操作ES
    IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
    System.out.println(indexResponse);

}
1.2 修改文档
@Test
public void updateData() throws IOException {
    // UpdateRequest
    UpdateRequest updateRequest = new UpdateRequest("users", "1");
    User user = new User();
    user.setUserName("李四");
    user.setAge(20);
    user.setGender("女");
    updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);
    // 操作ES
    restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
}
1.3 删除文档
@Test
public void delete() throws IOException {
    // DeleteRequest
    DeleteRequest deleteRequest = new DeleteRequest("users", "1");
    // 操作ES
    DeleteResponse deleteResponse = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
}
1.4 查询文档
@Test
public void search() throws IOException {
    // SearchRequest
    SearchRequest searchRequest = new SearchRequest();
    searchRequest.indices("users");
	// 构建检索条件
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    // 分页采用简单的from + size分页,适用数据量小的,了解更多分页方式可自行查阅资料
    //        searchSourceBuilder.from((page - 1) * rows);
    //        searchSourceBuilder.size(rows);
    // 查询所有
    //        QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();
    // 根据字段匹配
    QueryBuilder queryBuilder = QueryBuilders.matchQuery("userName","李四");
    searchSourceBuilder.query(queryBuilder);
    
    searchRequest.source(searchSourceBuilder);
    // 查询ES
    SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
    System.out.println("查询结果:" + searchResponse.toString());
    SearchHits hits = searchResponse.getHits();
    // 遍历封装列表对象
    List userList = new ArrayList<>();
    SearchHit[] searchHits = hits.getHits();
    for (SearchHit searchHit : searchHits) {
        userList.add(JSON.parseObject(searchHit.getSourceAsString(), User.class));
    }
    System.out.println(userList);
}

搜索address中包含mill的所有人的年龄分布以及平均年龄,平均薪资

GET bank/_search
{
  "query": {
    "match": {
      "address": "Mill"
    }
  },
  "aggs": {
    "ageAgg": {
      "terms": {
        "field": "age",
        "size": 10
      }
    },
    "ageAvg": {
      "avg": {
        "field": "age"
      }
    },
    "balanceAvg": {
      "avg": {
        "field": "balance"
      }
    }
  }
}

代码实现

@Test
public void find() throws IOException {
    // 1 创建检索请求
    SearchRequest searchRequest = new SearchRequest();
    searchRequest.indices("bank");
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    // 构造检索条件
    sourceBuilder.query(QueryBuilders.matchQuery("address","mill"));
    //AggregationBuilders工具类构建AggregationBuilder
    // 构建第一个聚合条件:按照年龄的值分布
    TermsAggregationBuilder agg1 = AggregationBuilders.terms("agg1").field("age").size(10);// 聚合名称
    // 参数为AggregationBuilder
    sourceBuilder.aggregation(agg1);
    // 构建第二个聚合条件:平均薪资
    AvgAggregationBuilder agg2 = AggregationBuilders.avg("agg2").field("balance");
    sourceBuilder.aggregation(agg2);

    System.out.println("检索条件"+sourceBuilder.toString());

    searchRequest.source(sourceBuilder);

    // 2 执行检索
    SearchResponse response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
    // 3 分析响应结果
    System.out.println(response.toString());
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/785849.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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