18-28-elasticsearch-javaapi

18-elasticsearch-javaapi:

Java API 环境准备

Elasticsearch 软件是由 Java 语言开发的,所以也可以通过 Java API 的方式对 Elasticsearch

服务进行访问

创建 Maven 项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D5rBquzY-1668850719332)(png/1620185214072.png)]

引入依赖

<dependencies>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.8.0</version>
        </dependency>
        <!-- elasticsearch 的客户端 -->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.8.0</version>
        </dependency>
        <!-- elasticsearch 依赖 2.x 的 log4j -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.8.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.8.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.9</version>
        </dependency>
        <!-- junit 单元测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
package com.zh.es;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;

import java.io.IOException;

public class EstestClient {
    public static void main(String[] args) throws IOException {
        //创建es客户端
        RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",9200,"http")));


        //关闭es客户端
        esClient.close();
    }
}

运行测试是否可以连接本地es服务。不报错ok

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y1rswNhw-1668850719333)(png/1620185543553.png)]

api创建索引

package com.zh.es;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;

import java.io.IOException;

public class EstestClientIndexCreate {
    public static void main(String[] args) throws IOException {
        RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",9200,"http")));

        //创建索引,user索引名称
        CreateIndexRequest user = new CreateIndexRequest("user1");
        CreateIndexResponse indexResponse = esClient.indices().create(user, RequestOptions.DEFAULT);

        //相应状态
        boolean acknowledged = indexResponse.isAcknowledged();
        System.out.println("创建索引"+acknowledged);
        //关闭es客户端
        esClient.close();
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0tNGdZuk-1668850719334)(png/1620185952662.png)]

api-查询索引

    private static void getIndex() throws IOException {
        RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",9200,"http")));
        
        GetIndexRequest user = new GetIndexRequest("user1");
        GetIndexResponse getIndexResponse =
                esClient.indices().get(user, RequestOptions.DEFAULT);

        //相应状态

        System.out.println(getIndexResponse.getAliases());
        System.out.println(getIndexResponse.getMappings());
        System.out.println(getIndexResponse.getSettings());
        //关闭es客户端
        esClient.close();
    }

删除索引

    //删除索引
    private static void deleteIndex() throws IOException {
        RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",9200,"http")));

        DeleteIndexRequest user = new DeleteIndexRequest("user1");
        AcknowledgedResponse delete = esClient.indices().delete(user,
                RequestOptions.DEFAULT);

        //相应状态
        boolean acknowledged = delete.isAcknowledged();
        System.out.println("删除索引"+acknowledged);
        //关闭es客户端
        esClient.close();
    }

创建文档

     //创建文档
    private static void insertDoc() throws IOException {
        RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",9200,"http")));
        //插入数据
        IndexRequest request = new IndexRequest();
        request.index("user1").id("1001");

        User user = new User();
        user.setName("doc_name_01");
        user.setAge(30);
        user.setSex("男");

        //向es插入数据,必须将对象转换为json类型
        ObjectMapper mapper = new ObjectMapper();
        String userJson = mapper.writeValueAsString(user);

        //数据源,数据格式,和postman中的raw类型中的json,txt类似
        request.source(userJson, XContentType.JSON);

        IndexResponse response = esClient.index(request, RequestOptions.DEFAULT);

        System.out.println(response.getResult());
        //关闭es客户端
        esClient.close();
    }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k9TMXACf-1668850719334)(png/1620192154746.png)]

修改文档数据

    //修改文档
    private static void upData() throws IOException {
        RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",9200,"http")));
        //修改数据
        UpdateRequest request = new UpdateRequest();
        request.index("user1").id("1001");
        request.doc(XContentType.JSON,"sex","女");
        
        UpdateResponse updateResponse = esClient.update(request, RequestOptions.DEFAULT);

        System.out.println(updateResponse.getResult());
        //关闭es客户端
        esClient.close();
    }

查询数据

    //查询数据
    private static void getData() throws IOException {
        RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",9200,"http")));
        GetRequest getRequest = new GetRequest();
        getRequest.index("user1").id("1001");

        GetResponse response = esClient.get(getRequest, RequestOptions.DEFAULT);

        System.out.println(response.getSourceAsString());
        //关闭es客户端
        esClient.close();
    }

删除文档

    //删除文档
    private static void deleteDoc() throws IOException {
        RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",9200,"http")));
        DeleteRequest deleteRequest = new DeleteRequest();
        deleteRequest.index("user1").id("1001");

        DeleteResponse response = esClient.delete(deleteRequest, RequestOptions.DEFAULT);

        System.out.println(response.getIndex());
        //关闭es客户端
        esClient.close();
    }

批量新增

    //批量新增
    private static void insertDocBatch() throws IOException {
        RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",9200,"http")));

        //批量插入数据
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.add(new IndexRequest().index("user1").id("1001").
                source(XContentType.JSON, "name", "zhangsan"));
        bulkRequest.add(new IndexRequest().index("user1").id("1002").
                source(XContentType.JSON, "name", "zhangsan002"));
        bulkRequest.add(new IndexRequest().index("user1").id("1003").
                source(XContentType.JSON, "name", "zhangsan003"));
        BulkResponse bulk = esClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulk.getTook());
        System.out.println(bulk.getItems());

        //关闭es客户端
        esClient.close();
    }

批量删除

    //批量删除数据
    private static void deleteDocBatch() throws IOException {
        RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",9200,"http")));

        //批量插入数据
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.add(new DeleteRequest().index("user1").id("1001"));
        bulkRequest.add(new DeleteRequest().index("user1").id("1002"));
        bulkRequest.add(new DeleteRequest().index("user1").id("1003"));
        BulkResponse bulk = esClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulk.getTook());
        System.out.println(bulk.getItems());

        //关闭es客户端
        esClient.close();
    }

api之全量查询

    //查询数据
    private static void queryDoc() throws IOException {
        RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",9200,"http")));

        //查询数据
        SearchRequest request = new SearchRequest();
        request.indices("user1");

        //查询索引中全量的数据
        SearchSourceBuilder query = new SearchSourceBuilder()
                .query(QueryBuilders.matchAllQuery());
        request.source(query);

        SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(search.getTook());

        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }

        //关闭es客户端
        esClient.close();
    }

条件查询

    //查询数据-条件查询
    private static void queryDocByrequirement() throws IOException {
        RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",9200,"http")));

        //条件查询
        SearchRequest request = new SearchRequest();
        request.indices("user1");

        //查询年龄为30的
        request.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("age",30)));

        SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(search.getTook());

        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }

        //关闭es客户端
        esClient.close();
    }

分页查询

    //查询数据-分页查询
    private static void queryDocByPagination() throws IOException {
        RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",9200,"http")));

        //条件查询
        SearchRequest request = new SearchRequest();
        request.indices("user1");

        SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
        builder.from(0);//起始位置        //{当前页面-1}*数据条数
        builder.size(2);//每页显示多少条


        request.source(builder);

        SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(search.getTook());

        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }

        //关闭es客户端
        esClient.close();
    }

排序查询

    //查询数据-排序查询
    private static void queryDocByOrder() throws IOException {
        RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",9200,"http")));

        //条件查询
        SearchRequest request = new SearchRequest();
        request.indices("user1");

        SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
        builder.sort("age", SortOrder.DESC);


        request.source(builder);

        SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(search.getTook());

        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }

        //关闭es客户端
        esClient.close();
    }

字段过滤查询

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cpw4KSTw-1668850719335)(png/1620221903886.png)]

    //查询数据-字段过滤查询
    private static void queryDocByFieldfilter() throws IOException {
        RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",9200,"http")));

        //条件查询
        SearchRequest request = new SearchRequest();
        request.indices("user1");

        SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
        //字段过滤排除
        String[] excludes={};
        String[] include={"name"};
        builder.fetchSource(include,excludes);


        request.source(builder);

        SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(search.getTook());

        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }

        //关闭es客户端
        esClient.close();
    }

组合查询

    //查询数据-组合查询
    private static void queryDocByMore() throws IOException {
        RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",9200,"http")));

        //条件查询
        SearchRequest request = new SearchRequest();
        request.indices("user1");

        SearchSourceBuilder builder = new SearchSourceBuilder();
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        //多条件的查询,and
//        boolQueryBuilder.must(QueryBuilders.matchQuery("age",30));
//        boolQueryBuilder.must(QueryBuilders.matchQuery("sex","男"));
//        boolQueryBuilder.mustNot(QueryBuilders.matchQuery("sex","女"));
        
        
        boolQueryBuilder.should(QueryBuilders.matchQuery("age",30));
        boolQueryBuilder.should(QueryBuilders.matchQuery("age",40));
        builder.query(boolQueryBuilder);
        
        request.source(builder);

        SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(search.getTook());

        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }

        //关闭es客户端
        esClient.close();
    }

范围查询

    //查询数据-范围查询
    private static void queryDocByrange() throws IOException {
        RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",9200,"http")));

        //条件查询
        SearchRequest request = new SearchRequest();
        request.indices("user1");

        SearchSourceBuilder builder = new SearchSourceBuilder();
        RangeQueryBuilder rangeQueryBuilder = 		  QueryBuilders.rangeQuery("name");
        rangeQueryBuilder.gte(30);
        rangeQueryBuilder.lte(60);

        builder.query(rangeQueryBuilder);

        request.source(builder);

        SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(search.getTook());

        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }

        //关闭es客户端
        esClient.close();
    }

模糊查询

    //查询数据-模糊查询
    private static void queryDocByLike() throws IOException {
        RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",9200,"http")));

        //条件查询
        SearchRequest request = new SearchRequest();
        request.indices("user1");

        SearchSourceBuilder builder = new SearchSourceBuilder();

        //Fuzziness.ONE偏差的距离
        builder.query(QueryBuilders.fuzzyQuery("name","zhangsan")
                .fuzziness(Fuzziness.ONE));

        request.source(builder);

        SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(search.getTook());

        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }

        //关闭es客户端
        esClient.close();
    }

高亮查询

    //查询数据-高亮查询
    private static void highlightQueryDoc() throws IOException {
        RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",9200,"http")));

        //条件查询
        SearchRequest request = new SearchRequest();
        request.indices("user1");

        SearchSourceBuilder builder = new SearchSourceBuilder();
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "zhangsan");
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.preTags("<font color='red'>");
        highlightBuilder.postTags("</font color='red'>");
        highlightBuilder.field("name");
        builder.highlighter();
        builder.query(termQueryBuilder);

        request.source(builder);

        SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(search.getTook());

        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }

        //关闭es客户端
        esClient.close();
    }

聚合查询,最大值

    //查询数据-聚合查询
    private static void aggregationQueryDoc() throws IOException {
        RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",9200,"http")));

        //条件查询
        SearchRequest request = new SearchRequest();
        request.indices("user1");

        SearchSourceBuilder builder = new SearchSourceBuilder();

        //求年龄的最大值
        MaxAggregationBuilder field = AggregationBuilders.max("MaxAge").field("age");
        //按照年龄分组
        //TermsAggregationBuilder field = AggregationBuilders.terms("ageFroup").field("age");
        
        
        builder.aggregation(field);
        request.source(builder);

        SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(search.getTook());

        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }

        //关闭es客户端
        esClient.close();
    }
  //求年龄的最大值
    MaxAggregationBuilder field = AggregationBuilders.max("MaxAge").field("age");
    //按照年龄分组
    //TermsAggregationBuilder field = AggregationBuilders.terms("ageFroup").field("age");
    
    
    builder.aggregation(field);
    request.source(builder);

    SearchResponse search = esClient.search(request, RequestOptions.DEFAULT);
    SearchHits hits = search.getHits();
    System.out.println(hits.getTotalHits());
    System.out.println(search.getTook());

    for (SearchHit hit : hits) {
        System.out.println(hit.getSourceAsString());
    }

    //关闭es客户端
    esClient.close();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值