ES集成SpringBoot 三 (测试增删改查)

一、找官方文档

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

直通车官方文档 https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/index.html

  1. 找到原生依赖

    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>7.12.1</version>
    </dependency>
    
  2. 找对象

    RestHighLevelClient client = new RestHighLevelClient(
            RestClient.builder(
                    new HttpHost("localhost", 9200, "http"),
                    new HttpHost("localhost", 9201, "http")));
    //关闭客户端
    client.close();
    

    在这里插入图片描述

  3. 分析这个类中的方法

二、配置基本操作

2.1 导入ES

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

问题:要保证导入的依赖和ES是同一个版本

<!--自定定义es版本依赖,保证和服务器中一致-->
<elasticsearch.version>7.12.1</elasticsearch.version>

在这里插入图片描述

2.2 创建配置文件ElasticSearchConfig

//1.找对象 2.放入spring中待用 3.分析源码
@Configuration
public class ElasticSearchConfig {
    //RestHighLevelClient 高级客户端
    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(
            RestClient.builder(
                    new HttpHost("localhost", 9200, "http")));
        return  client;
    }
}

在这里插入图片描述

2.3 高级客户端索引API测试

/**
 * 讲解es7.12.1 高级客户端测试API
 */
@SpringBootTest
class XsxtSystemApplicationTests {
    @Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient client;
    //创建索引
    @Test
    void testCreateIndex() throws IOException {
        //创建索引请求
        CreateIndexRequest request = new CreateIndexRequest("gdh-index");
        //客户端执行请求
        CreateIndexResponse createIndexResponse =
                client.indices().create(request, RequestOptions.DEFAULT);
        System.out.println(createIndexResponse);
    }
    //获取索引,只能判断是否存在
    @Test
    void testExistIndex() throws IOException {
        GetIndexRequest request = new GetIndexRequest("gdh-index");
        boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);
    }
    //删除索引
    @Test
    void testDeleteIndex() throws IOException {
        DeleteIndexRequest request = new DeleteIndexRequest("gdh-index");
        AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println(delete.isAcknowledged());
    }
}

2.4 高级客户端文档API测试

//创建文档
@Test
void testAddDocument() throws IOException {
    //创建对象
    User user = new User("李四", 20);
    //创建请求
    IndexRequest request = new IndexRequest("gdh-index");
    //规则
    request.id("1");
    request.timeout("1s");
    //将我们的数据放入请求
    request.source(JSON.toJSONString(user), XContentType.JSON);
    //客户端发送请求,获取响应结果
    IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
    System.out.println(indexResponse.toString());
    //命令返回的状态
    System.out.println(indexResponse.status());
}

//判断是否存在文档
@Test
void testIsExists() throws IOException {
    GetRequest request = new GetRequest("gdh-index","1");
    //不获取返回的_source 的上下文
    request.fetchSourceContext(new FetchSourceContext(false));
    request.storedFields("_none_");
    boolean exists = client.exists(request, RequestOptions.DEFAULT);
    System.out.println(exists);

}

///获取文档信息
@Test
void testGetDocument() throws IOException {
    GetRequest request = new GetRequest("gdh-index","1");
    GetResponse getResponse = client.get(request, RequestOptions.DEFAULT);
    System.out.println(getResponse.getSourceAsString());//打印文档内容
    //返回全部内容
    System.out.println(getResponse);
}

///更新文档信息
@Test
void testUpdateDocument() throws IOException {
    UpdateRequest updateRequest = new UpdateRequest("gdh-index", "1");
    updateRequest.timeout("1s");
    User user = new User("DYT",6);
    updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);
    UpdateResponse update = client.update(updateRequest, RequestOptions.DEFAULT);
    System.out.println(update);
}

///删除文档信息
@Test
void testDeleteDocument() throws IOException {
    DeleteRequest deleteRequest = new DeleteRequest("gdh-index", "1");
    deleteRequest.timeout("1s");
    DeleteResponse delete = client.delete(deleteRequest, RequestOptions.DEFAULT);
    System.out.println(delete);
}

2.5 特殊批量插入、更新、删除

//批量插入数据
@Test
void testBulkRequest() throws IOException {
    BulkRequest bulkRequest = new BulkRequest();
    bulkRequest.timeout("10s");
    ArrayList<User> userList = new ArrayList<>();
    userList.add(new User("李四",30));
    userList.add(new User("李四1",33));
    userList.add(new User("李四2",40));
    userList.add(new User("王五1",19));
    userList.add(new User("王五2",9));
    userList.add(new User("王五3",11));
    for (int i = 0; i<userList.size();i++) {
        //批量更新和批量删除就在这里改对应的请求就可以了
        bulkRequest.add(
            new IndexRequest("gdh-index")
            .id(""+(i+1))
            .source(JSON.toJSONString(userList.get(i)),XContentType.JSON)
        );
    }
    BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);
    System.out.println(bulk.hasFailures());//是否失败

}

 //查询
/**
     *SearchRequest  搜索请求
     * SearchSourceBuilder 构造搜索条件
     * HighlightBuilder 构造高亮
     * QueryBuilders  精确
     * MatchAllQueryBuilder 查询所有
     */
@Test
void testSearch() throws IOException {
    //创建搜索请求
    SearchRequest searchRequest = new SearchRequest("gdh-index");
    //构造搜索条件
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    /**
         * 查询条件 可以使用QueryBuilders工具来实现
         *  QueryBuilders.termQuery 精确
         *    QueryBuilders.matchAllQuery() 查询所有
         */
    TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "李四");

    sourceBuilder.query(termQueryBuilder);
    sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
    searchRequest.source(sourceBuilder);
    SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
    System.out.println(JSON.toJSONString(search.getHits().getHits()));
    System.out.println("===============================");
    for (SearchHit documentFields : search.getHits().getHits()){
        System.out.println(documentFields.getSourceAsMap());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中集成Elasticsearch时,需要进行mapping配置。根据引用\[2\]中的代码示例,可以创建一个名为EsGoodsRepository的接口,并继承ElasticsearchRepository。在该接口中,可以定义对应的实体类和主键类型。这样就可以通过该接口来进行Elasticsearch的操作了。 另外,根据引用\[1\]中的说明,为了允许外部访问Elasticsearch,需要修改配置文件。配置文件的路径在config/elasticsearch.yml。可以使用vi命令打开该文件进行修改。 总结起来,集成Elasticsearch时,需要创建EsGoodsRepository接口,并继承ElasticsearchRepository,同时进行mapping配置。另外,还需要修改Elasticsearch的配置文件以允许外部访问。 #### 引用[.reference_title] - *1* *3* [SpringBoot集成Elasticsearch7.4 实战(一)](https://blog.csdn.net/qq_37284798/article/details/128718272)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [SpringBoot集成elasticsearch使用(增删改查)](https://blog.csdn.net/ljfgyy0205/article/details/130086495)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值