ElasticSearch(2)

5、通过Java访问ES

5.1 环境

创建maven工程,主要是通过两个依赖:

        <!--主要是这两个依赖-->
        <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>

5.2 索引操作

5.2.1 创建索引

首先需要使用RestHighLevelClient创建客户端,

RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost",9200,"http")) // 其中包括主机名,端口,请求方式
);
        // 创建索引请求
        CreateIndexRequest request = new CreateIndexRequest("user"); //user是索引的名
        // 通过客户端创建索引并得到响应的请求
        CreateIndexResponse response = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
​
        //相应状态
        boolean acknowledged = response.isAcknowledged();
        System.out.println(acknowledged);
        restHighLevelClient.close();

5.2.2 查询索引

查询索引使用的是GetIndexRequest,及GetIndexResponse.

// 创建索引
GetIndexRequest request = new GetIndexRequest("user");
GetIndexResponse response = restHighLevelClient.indices().get(request, RequestOptions.DEFAULT);

通过postman查询的索引信息主要包括下面的内容,通过java的api的get方法得到响应的信息

{
    "user": {
        "aliases": {}, //response.getAliases();
        "mappings": {}, //response.getMappings();
        "settings": { //response.getSettings();
            "index": {
                "creation_date": "1650780419948",
                "number_of_shards": "1",
                "number_of_replicas": "1",
                "uuid": "dWGyIiiFTZ6gEtqfqJ-g_g",
                "version": {
                    "created": "7080099"
                },
                "provided_name": "user"
            }
        }
    }
}

5.2.3 删除索引

删除索引使用DeleteIndexRequest,返回的可以是bool值表示是否删除成功。

DeleteIndexRequest request = new DeleteIndexRequest("user");
AcknowledgedResponse response = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
response.isAcknowledged();

5.3 文档操作

5.3.1 创建文档

创建文档首先需要有插入的内容,定义一个实体类并给与相应的数据。插入文档对应的是IndexRequest,及request.source()方法。

public class ESTest_InsertDoc {
    public static void main(String[] args) throws IOException {
        RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost",9200,"http"))
        );
        // 创建文档
        IndexRequest request = new IndexRequest("user");
        // 设置文档的id(自定义id)
        request.id("1001");
        // 文档的内容 相当于一行数据
        User user=new User();
        user.setName("张三");
        user.setSex("男");
        user.setAge(25);
        // 由于文档是json格式 因此需要把对象转换成json字符串
        ObjectMapper objectMapper=new ObjectMapper();
        String insertDocString = objectMapper.writeValueAsString(user);
        request.source(insertDocString, XContentType.JSON);
        //调用方法插入文档
        IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);
        //相应状态
        System.out.println(response.getResult());
        restHighLevelClient.close();
    }
}
​

5.3.2 修改文档

修改文档对应的是UpdateRequest,及request.doc()方法。

    // 修改文档
    UpdateRequest request = new UpdateRequest();
    request.index("user");
    request.id("1001");
    // 将性别修改为女
    request.doc(XContentType.JSON,"sex","女");
    UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);
    //相应状态
    System.out.println(response.getResult());
    restHighLevelClient.close();

5.3.3 查询文档

修改文档对应的是GetRequest,及request.get()方法。

    // 查询文档
    GetRequest request = new GetRequest();
    request.index("user").id("1001");
​
    GetResponse response = restHighLevelClient.get(request, RequestOptions.DEFAULT);
    //相应状态
    System.out.println(response.getSourceAsString());

5.3.4 删除文档

修改文档对应的是DeleteRequest。

  // 删除文档
        DeleteRequest request = new DeleteRequest();
        request.index("user").id("1001");
​
        DeleteResponse response = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
        //相应状态
        System.out.println(response.getResult());

5.3.5 批量增加文档

 // 创建文档
        BulkRequest request = new BulkRequest();
        ObjectMapper objectMapper=new ObjectMapper();
       request.add(new                 IndexRequest().index("user").id("1001").source(XContentType.JSON,"name","张三","sex","男","age",20));
        request.add(new                 IndexRequest().index("user").id("1002").source(XContentType.JSON,"name","李四","sex","男","age",20));
        request.add(new                 IndexRequest().index("user").id("1003").source(XContentType.JSON,"name","王五","sex","男","age",20));
        request.add(new                 IndexRequest().index("user").id("1004").source(XContentType.JSON,"name","赵六","sex","男","age",20));
      BulkResponse response = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
        //相应状态
        System.out.println(response.getItems());

5.3.6 批量删除文档

 // 删除文档
        BulkRequest request = new BulkRequest();
        ObjectMapper objectMapper=new ObjectMapper();
        request.add(new DeleteRequest().index("user").id("1001"));
        request.add(new DeleteRequest().index("user").id("1002"));
        request.add(new DeleteRequest().index("user").id("1003"));
        request.add(new DeleteRequest().index("user").id("1004"));
​
        BulkResponse response = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
        //相应状态
        System.out.println(response.getItems());

5.3.7 全量查询

 // 全量文档
        SearchRequest request = new SearchRequest("user");
        request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        //相应状态
        System.out.println(hits.getTotalHits());
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }
        restHighLevelClient.close();

5.3.8 条件&分页&排序查询

//条件查询
        SearchRequest request = new SearchRequest("user");
        request.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("sex","男")));
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        //相应状态
        System.out.println(hits.getTotalHits());
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }

       // 分页查询文档
        SearchRequest request = new SearchRequest("user");
        SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
        builder.from(0);
        builder.size(2);
        request.source(builder);
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        //相应状态
        System.out.println(hits.getTotalHits());
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }

        // 排序查询文档
        SearchRequest request = new SearchRequest("user");
        SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
        builder.sort("age", SortOrder.DESC);
        request.source(builder);
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        //相应状态
        System.out.println(hits.getTotalHits());
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }
        restHighLevelClient.close();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值