Springboot整合Elasticsearch及相关API

Springboot整合Elasticsearch

Springboot整合Elasticsearch只需要引入完成以下两步操作

  • 引入依赖:spring-boot-starter-data-elasticsearch
  • 在属性中修改<elasticsearch.version>标签,将版本改为与elasticsearch服务器相同的版本即可
  • 自定义配置类引入es高级客户端

自定义配置类引入es高级客户端

@Configuration
public class ElasticSearchClientConfig {

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

}

索引操作API

@SpringBootTest
class EsIndexTests {

    @Autowired
    private RestHighLevelClient restHighLevelClient;

    /**
     * 1、es测试创建索引
     * */
    @Test
    void testCreateIndex() throws Exception {
        // 1.创建索引请求
        CreateIndexRequest request = new CreateIndexRequest("yang_index");
        // 2.客户端执行请求
        CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
        System.out.println(createIndexResponse);
    }

    /**
     * 2、es测试获取索引
     * */
    @Test
    void testExistIndex() throws Exception {
        // 1.获取索引请求
        GetIndexRequest request = new GetIndexRequest("yang_index");
        // 2.客户端执行请求
        boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);
    }

    /**
     * 3、es测试删除索引
     * */
    @Test
    void testDeleteIndex() throws Exception {
        DeleteIndexRequest request = new DeleteIndexRequest("yang_index");
        AcknowledgedResponse response = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println(response.isAcknowledged());
    }

}

文档操作API

@SpringBootTest
public class EsDocumentTests {

    @Autowired
    private RestHighLevelClient restHighLevelClient;

    /**
     * 1、es测试添加文档
     * */
    @Test
    void testAddDocument() throws Exception {
        User user = new User("yang", 15);
        IndexRequest request = new IndexRequest("yang_index");
        request.id("2");
        request.timeout(TimeValue.timeValueSeconds(1));
        request.source(JSON.toJSONString(user), XContentType.JSON);
        IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);
        System.out.println(response.status());
    }

    /**
     * 2、es测试批量添加文档
     * */
    @Test
    void testAddBatchDocument() throws Exception {
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout(TimeValue.timeValueSeconds(10));

        ArrayList<User> users = new ArrayList<>();
        users.add(new User("yang1", 21));
        users.add(new User("yang2", 22));
        users.add(new User("yang3", 23));
        users.add(new User("yang4", 24));
        users.add(new User("yang5", 25));

        for (int i = 0; i < users.size(); i++) {
            bulkRequest.add(
                    new IndexRequest("yang_index")
                    .id("" + (i+1))
                    .source(JSON.toJSONString(users.get(i)), XContentType.JSON)
            );
        }
        BulkResponse response = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(response.hasFailures());
    }

    /**
     * 3、es测试文档是否存在
     * */
    @Test
    void testDocumentIsExists() throws Exception {
        GetRequest getRequest = new GetRequest("yang_index", "1");
        boolean exists = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);
        System.out.println(exists);
    }

    /**
     * 4、es测试获取文档信息
     * */
    @Test
    void testGetDocument() throws Exception {
        GetRequest getRequest = new GetRequest("yang_index", "1");
        GetResponse document = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
        String source = document.getSourceAsString();
        System.out.println(source);
    }

    /**
     * 5、es测试更新文档信息
     * */
    @Test
    void testUpdateDocument() throws Exception {
        UpdateRequest updateRequest = new UpdateRequest("yang_index", "1");
        updateRequest.timeout(TimeValue.timeValueSeconds(1));
        User user = new User();
        user.setName("yang_111");
        updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);
        UpdateResponse response = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println(response.status());
    }

    /**
     * 6、es测试删除文档
     * */
    @Test
    void testDeleteDocument() throws Exception {
        DeleteRequest request = new DeleteRequest("yang_index","1");
        request.timeout(TimeValue.timeValueSeconds(1));
        DeleteResponse response = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
        System.out.println(response.status());
    }

    /**
     * 7、es测试查询文档
     *      SearchRequest           搜索请求
     *      SearchSourceBuilder     条件构造
     *      HighlightBuilder        构建高亮
     *      TermQueryBuilder        精确查询
     *      xxxQueryBuilder         表示对应的命令
     * */
    @Test
    void testQueryDocument() throws Exception {
        SearchRequest searchRequest = new SearchRequest("yang_index");
        //构建搜索条件
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        //查询条件
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "yang");
        //组合
        sourceBuilder.query(termQueryBuilder)
                .timeout(TimeValue.timeValueSeconds(100));
        //封装进searchRequest中
        searchRequest.source(sourceBuilder);
        //通过客户端发送并得到响应
        SearchResponse response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        for (SearchHit hit : response.getHits()) {
            System.out.println(hit.getSourceAsString());
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot整合Elasticsearch常用API主要包括以下几个方面: 1. 配置Elasticsearch信息 首先需要在application.yml中配置Elasticsearch的连接信息: ``` spring: data: elasticsearch: cluster-name: elasticsearch cluster-nodes: 127.0.0.1:9300 ``` 2. 创建ElasticsearchRepository 在SpringBoot中,可以通过ElasticsearchRepository来访问Elasticsearch,只需要继承该接口即可。 ``` public interface UserRepository extends ElasticsearchRepository<User, Long> { } ``` 其中,User是实体类,Long是主键类型。 3. 创建实体类 创建实体类,使用注解来映射Elasticsearch中的索引和字段。 ``` @Document(indexName = "user", type = "_doc") public class User { @Id private Long id; @Field(type = FieldType.Keyword) private String name; @Field(type = FieldType.Integer) private Integer age; // getter and setter } ``` 4. 增删改查 通过ElasticsearchRepository提供的方法,可以实现增删改查的操作。如下: ``` @Autowired UserRepository userRepository; // 新增 userRepository.save(user); // 删除 userRepository.deleteById(id); // 修改 userRepository.save(user); // 查询 Optional<User> optional = userRepository.findById(id); ``` 5. 搜索 Elasticsearch提供了丰富的搜索API,可以通过QueryBuilder来构建查询条件,通过SearchRequest来执行搜索操作。如下: ``` @Autowired RestHighLevelClient restHighLevelClient; // 构建查询条件 QueryBuilder queryBuilder = QueryBuilders.matchQuery("name", "张三"); // 构建SearchRequest SearchRequest searchRequest = new SearchRequest("user"); searchRequest.types("_doc"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(queryBuilder); searchRequest.source(searchSourceBuilder); // 执行搜索 SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); // 处理搜索结果 SearchHits hits = searchResponse.getHits(); for (SearchHit hit : hits) { String sourceAsString = hit.getSourceAsString(); User user = JSON.parseObject(sourceAsString, User.class); System.out.println(user); } ``` 以上就是SpringBoot整合Elasticsearch常用API的介绍。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值