elasticsearch——javaAPI简单案例

1、创建实例

操作时直接通过注入RestHighLevelClient 即可

@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 getRestHighLevelClient(){

        RestClientBuilder builder = null;
        //地址-端口-协议
        //String hostname, int port, String scheme
        builder = RestClient.builder(new HttpHost("192.168.144.201", 9200, "http"));
        RestHighLevelClient client = new RestHighLevelClient(builder);

        //RestHighLevelClient client = new RestHighLevelClient(
        //        RestClient.builder(
        //                new HttpHost("192.168.144.201", 9200, "http")));
        return client;
    }
}

2、使用索引插入一条记录

/**
     * 测试数据添到es
     * 更新也可以
     * @throws IOException
     */
    @Test
    public void index() throws IOException {
        IndexRequest request = new IndexRequest("users");
        request.id("1");
        User user = new User();
        user.setUserName("guiguixia");
        user.setAge(18);
        user.setGender("男");
        String jsonString = JSON.toJSONString(user);

        request.source(jsonString, XContentType.JSON);
        IndexResponse index = client.index(request, GulimallElasticSearchConfig.COMMON_OPTIONS);

        System.out.println(index);

    }

3、直接查询

@Test
    public void testSearch() throws IOException {
        // 1、构造检索条件
        //  1.1)、指定索引
        SearchRequest searchRequest = new SearchRequest("bank");
        //  1.2)、构造检索条件
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //检索条件和命令是一致的,之后将检索条件注入searchRequest
        //searchSourceBuilder.from();
        //searchSourceBuilder.size();
        //searchSourceBuilder.query();
        //searchSourceBuilder.aggregations();
        // address 字段包含mill单词的
        searchSourceBuilder.query(QueryBuilders.matchQuery("address","mill"));

        // 查询构造的查询条件
        System.out.println(searchSourceBuilder);

        // 2、执行检索
        searchRequest.source(searchSourceBuilder);
        SearchResponse response = client.search(searchRequest,GulimallElasticSearchConfig.COMMON_OPTIONS);

        // 3、分析结果
        System.out.println(response);
    }

4、复杂查询

构建了两个聚合查询
并对返回结果进行处理

@Test
    public void testSearch() throws IOException {
        // 1、构造检索条件
        //  1.1)、指定索引
        SearchRequest searchRequest = new SearchRequest("bank");
        //  1.2)、构造检索条件
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //searchSourceBuilder.from();
        //searchSourceBuilder.size();
        //searchSourceBuilder.query();
        //searchSourceBuilder.aggregations();
        searchSourceBuilder.query(QueryBuilders.matchQuery("address","mill"));
        //  按年龄的值分布进行检索
        TermsAggregationBuilder ageCount = AggregationBuilders.terms("ageCount").field("age").size(10);
        //  计算总的平均工资
        AvgAggregationBuilder ageCountBalance = AggregationBuilders.avg("ageCountBalance").field("balance");
        searchSourceBuilder.aggregation(ageCount);
        searchSourceBuilder.aggregation(ageCountBalance);

        // 查询构造的查询条件
        System.out.println(searchSourceBuilder);

        // 2、执行检索
        searchRequest.source(searchSourceBuilder);
        SearchResponse response = client.search(searchRequest,GulimallElasticSearchConfig.COMMON_OPTIONS);

        // 3、分析结果
        System.out.println(response);
        //   3.1)、获取命中结果
        SearchHits hits = response.getHits();
        SearchHit[] hits1 = hits.getHits();
        for (SearchHit hit : hits1) {
            /**
             *  "_index":"bank",
             *  "_type":"account",
             *  "_id":"1",
             *  "_score":1,
             *  "_source":
             */
            //hit.getId();hit.getIndex();hit.getScore()
            String sourceAsString = hit.getSourceAsString();
            Account account = JSON.parseObject(sourceAsString, Account.class);
            System.out.println("命中的对象:"+account.toString());
        }

        //   3.2)、获取聚合信息
        Aggregations aggregations = response.getAggregations();
        Terms ageCount1 = aggregations.get("ageCount");
        System.out.println("===================ageCount=================");
        for (Terms.Bucket bucket : ageCount1.getBuckets()) {
            System.out.println("key:"+ bucket.getKeyAsString()+"===>"+bucket.getDocCount());
        }

        System.out.println("===================ageCount=================");
        Avg ageCountBalance1 = aggregations.get("ageCountBalance");
        System.out.println("平均工资:"+ageCountBalance1.getValueAsString());
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值