7、ElasticSearch:集成SpringBoot

本文详细介绍如何使用Elasticsearch进行文档操作,包括创建、获取、删除索引,添加、获取、更新、删除文档,批量插入及查询等核心功能,并提供Spring Boot环境下的具体实现代码。

7.1、找文档

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1、找到原生的依赖

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.6.2</version>
</dependency>

2、找对象
在这里插入图片描述
3、分析这个类中的方法

7.2、配置基本的项目

在这里插入图片描述
注意:
在这里插入图片描述

7.3、测试API

7.3.1、创建索引

前提:

  1. 在congfig下编写ElasticSearchConfig
@Configuration
public class ElasticSearchConfig {

    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("127.0.0.1", 9200, "http")));
        return client;
    }

}
  1. SpringBoot自带的测试类
@SpringBootTest
class EsApiApplicationTests {

    @Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient client;
	
	//......

}

创建索引

// 测试索引的创建 Request
@Test
void testCreatIndex() throws IOException {
    // 1、创建索引请求
    CreateIndexRequest request = new CreateIndexRequest("chen_index");
    // 2、客户端执行创建请求 IndicesClient,请求后获得相应
    CreateIndexResponse createIndexResponse =
            client.indices().create(request, RequestOptions.DEFAULT);

    System.out.println(createIndexResponse);
}

7.3.2、获取索引

// 测试获取索引 判断其是否存在
@Test
void testExistIndex() throws IOException {
    GetIndexRequest request = new GetIndexRequest("chen_index");
    boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
    System.out.println(exists);
}

7.3.3、删除索引

// 测试删除索引
@Test
void textDeleteIndex() throws IOException {
    DeleteIndexRequest request = new DeleteIndexRequest("chen_index");
    AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
    System.out.println(delete.isAcknowledged());
}

7.3.4、添加文档

首先创建一个实体User类

@Data
@NoArgsConstructor
@AllArgsConstructor
@Component
public class User {
    private String name;
    private int age;
}
    // 测试添加文档
    @Test
    void testAddDocument() throws IOException {
        // 创建对象
        User user = new User("张三", 3);
        // 创建请求
        IndexRequest request = new IndexRequest("chen_index");
        // 规则 put /chen_index/_doc/1
        request.id("1");
        request.timeout(TimeValue.timeValueSeconds(1));
        // request.timeout("1s");

        // 将我们的数据放入请求 这里需要导入我们的json依赖包,真实项目不建议使用fastjson
        request.source(JSON.toJSONString(user), XContentType.JSON);

        // 客户端发送请求
        IndexResponse index = client.index(request, RequestOptions.DEFAULT);
        System.out.println(index.toString());
        System.out.println(index.status()); // 对应我们命令返回的状态 CREATED
    }

7.3.5、获取文档

    // 获取文档,判断是否存在
    @Test
    void testExists() throws IOException {
        GetRequest request = new GetRequest("chen_index", "1");

        // 不获取返回的 _source 的上下文了
        // request.fetchSourceContext(new FetchSourceContext(false));


        boolean exists = client.exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);

    }

7.3.6、获取文档信息

    // 获取文档的信息
    @Test
    void testGetDocument() throws IOException {
        GetRequest request = new GetRequest("chen_index", "1");
        GetResponse getResponse = client.get(request, RequestOptions.DEFAULT);
        System.out.println(getResponse.getSourceAsString()); // 打印文档的内容
        System.out.println(getResponse); // 这里返回的全部内容和命令是一样的
    }

7.3.7、更新文档信息

// 更新文档信息
@Test
void testUpdateDocument() throws IOException {
    UpdateRequest request = new UpdateRequest("chen_index", "1");
    request.timeout("1s");

    User user = new User("李四",16);
    request.doc(JSON.toJSONString(user),XContentType.JSON);

    UpdateResponse update = client.update(request, RequestOptions.DEFAULT);
    System.out.println(update.status());
}

7.3.8、删除文档记录

// 删除文档记录
@Test
void testDeleteDocument() throws IOException {
    DeleteRequest request = new DeleteRequest("chen_index", "1");
    request.timeout("1s");

    DeleteResponse delete = client.delete(request, RequestOptions.DEFAULT);
    System.out.println(delete.status());
}

7.3.9、批量插入

// 特殊的,真的项目一般都会批量插入数据!
@Test
void testBulkRequest() throws IOException {
    BulkRequest request = new BulkRequest();
    request.timeout("10s");

    ArrayList<User> users = new ArrayList<>();
    users.add(new User("chen1",3));
    users.add(new User("chen2",3));
    users.add(new User("chen3",3));
    users.add(new User("chen4",3));
    users.add(new User("chen5",3));

    // 批处理请求
    for (int i = 0; i < users.size(); i++) {
        // 批量更新和批量删除,就在这里修改对应的请求
        request.add(
                new IndexRequest("chen_index")
                .id(""+i)
                .source(JSON.toJSONString(users.get(i)),XContentType.JSON));
    }
    BulkResponse bulk = client.bulk(request, RequestOptions.DEFAULT);
    // 是否失败,返回false代表成功
    System.out.println(bulk.hasFailures());
}

7.3.10、查询

// 查询
  // SearchRequest 搜索请求
  // SearchSourceBuilder 条件构造
  // HighlightBuild 高亮
  // TermQueryBuilder 精确查询
  // MatchAllQueryBuilder

  // xxxQueryBuilder 对应我们刚才看到的所有命令
  @Test
  void testSearch() throws IOException {
      SearchRequest request = new SearchRequest("chen_index");
      // 构建搜索条件
      SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

      // 查询条件,我们可以用QueryBuilders工具类来实现

      // QueryBuilders.termQuery 精确
      // QueryBuilders.matchAllQuery() 匹配所有
      TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "chen5");
      // MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
      sourceBuilder.query(termQueryBuilder);
      // sourceBuilder.from();
      // sourceBuilder.size();
      sourceBuilder.timeout(new TimeValue(60,TimeUnit.SECONDS));

      request.source(sourceBuilder);

      SearchResponse searchResponse = client.search(request, RequestOptions.DEFAULT);
      SearchHits hits = searchResponse.getHits();
      System.out.println(JSON.toJSONString(hits));
      System.out.println("============================");
      for (SearchHit hit : hits.getHits()) {
          System.out.println(hit.getSourceAsMap());
      }

学习视频链接:https://www.bilibili.com/video/BV17a4y1x7zq?p=14

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值