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

springboot整合Elasticsearch简单操作

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

springboot整合Elasticsearch简单操作

以下步骤均参考Elasticsearch操作文档:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high.html

1、导入依赖

	
    7.12.1


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

2、配置
@Configuration
public class ElasticsearchConfig {

    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("192.168.8.110", 9200, "http")));
        return client;
    }

}

3、测试
@Data
public class User{
    private String name;
    private Integer age;
    private String  gender;
}
3.1、数据操作 - - 增改

添加或修改

//添加或修改
@Autowired
private RestHighLevelClient client;


@Test
public void indexData() throws IOException {
    IndexRequest request = new IndexRequest("users");  //等价下面注释的两行代码
   
    request.id("1");
    User user = new User();
    user.setAge(20);
    user.setName("李四");
    user.setGender("男");
    String jsonString = JSON.toJSONString(user);
    //要保存的内容
    request.source(jsonString, XContentType.JSON);
    //执行操作
    IndexResponse response = client.index(request, ElasticsearchConfig.COMMON_OPTIONS);
    //响应数据
    System.out.println(response);
}

批量添加

//批量添加
@Test
public void bulkData() throws IOException {
    List list = new ArrayList<>();
    //批量操作对象
    BulkRequest bulkRequest = new BulkRequest();
    for (User user : list) {
        //封装批量数据
        IndexRequest request = new IndexRequest("users");
        request.id(user.getId());
        String jsonString = JSON.toJSONString(user);
        request.source(jsonString,XContentType.JSON);
        //添加数据
        bulkRequest.add(request);
    }
    //解析结果
    BulkResponse bulkResponse = client.bulk(bulkRequest, ElasticsearchConfig.COMMON_OPTIONS);
    //是否出现错误
    boolean hasFailures = bulkResponse.hasFailures();

}
3.2、检索

文档地址:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-search.html

3.2.1、简单检索

SDL语法:

结果:

@Test
public void searchData() throws IOException {
    // 1、创建检索请求
    SearchRequest request = new SearchRequest();
    // 指定检索索引
    request.indices("bank");
    // DSL,检索条件
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//        searchSourceBuilder.query();
//        searchSourceBuilder.from();
//        searchSourceBuilder.size();
//        searchSourceBuilder.aggregation();
    searchSourceBuilder.query(QueryBuilders.matchQuery("address","mill"));
    System.out.println(searchSourceBuilder.toString());
    request.source(searchSourceBuilder);

    // 2、执行检索
    SearchResponse response = client.search(request, ElasticsearchConfig.COMMON_OPTIONS);
    // 3、分析结果
    System.out.println(response.toString());
}
3.2.2、复杂检索



// 此类根据查询结果,在线生成(例如json在线格式化)
@Data
public class Accout {

    private int account_number;
    private int balance;
    private String firstname;
    private String lastname;
    private int age;
    private String gender;
    private String address;
    private String employer;
    private String email;
    private String city;
    private String state;
}
@Test
public void searchData() throws IOException {
    // 1、创建检索请求
    SearchRequest request = new SearchRequest();
    // 指定检索索引
    request.indices("bank");
    // DSL,检索条件
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    // 1.1)构造检索条件
    searchSourceBuilder.query(QueryBuilders.matchQuery("address","mill"));
    // 1.2)按照年龄的值分布进行聚合操作
    TermsAggregationBuilder ageAgg = AggregationBuilders.terms("ageAgg").field("age").size(10);
    searchSourceBuilder.aggregation(ageAgg);
    // 1.3) 计算平均工资
    AvgAggregationBuilder balanceAvg = AggregationBuilders.avg("balanceAvg").field("balance");
    searchSourceBuilder.aggregation(balanceAvg);

    System.out.println("检索条件:"+searchSourceBuilder.toString());
    request.source(searchSourceBuilder);

    // 2、执行检索
    SearchResponse response = client.search(request, ElasticsearchConfig.COMMON_OPTIONS);
    // 3、分析结果
    System.out.println(response.toString());
    //Map map = JSON.parseObject(response.toString(), Map.class);
    // 3.1) 获取所有查询的记录
    SearchHits hits = response.getHits();
    SearchHit[] searchHits = hits.getHits();
    for (SearchHit searchHit : searchHits) {
        String sourceAsString = searchHit.getSourceAsString();
        Accout accout = JSON.parseObject(sourceAsString, Accout.class);
        System.out.println(accout);
    }
    // 3.2)获取聚合信息
    Aggregations aggregations = response.getAggregations();
    //年龄聚合
    Terms ageAgg1 = aggregations.get("ageAgg");
    for (Terms.Bucket bucket : ageAgg1.getBuckets()) {
        String keyAsString = bucket.getKeyAsString();
        System.out.println("年龄:"+keyAsString);
    }
    //平均工资聚合
    Avg balanceAvg1 = aggregations.get("balanceAvg");
    System.out.println("平均工资:"+balanceAvg1.getValue());
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/731551.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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