springboot整合elasticSearch极速入门

springboot整合elasticSearch,首先可以通过yml配置。

同时可以通过使用configration注解将它注入到spring容器中

@Configuration
public class ESConfig {

  @Bean
  public RestHighLevelClient     getClient(){

      RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
              RestClient.builder(new HttpHost("127.0.0.1",9200,"http")));
         return  restHighLevelClient;
  }


}

config后可以直接使用

下面是关于索引得基本操作

  /**创建索引
         *
         CreateIndexRequest createIndexRequest = new CreateIndexRequest("demo1");
         client.indices().create(createIndexRequest, RequestOptions.DEFAULT);*/

        /** 查询索引信息
         * GetIndexRequest getIndexRequest = new GetIndexRequest("demo1");
         GetIndexResponse getIndexResponse = client.indices().get(getIndexRequest, RequestOptions.DEFAULT);
         System.out.println("------"+getIndexResponse);*/

        /**删除索引信息
         *
         DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("demo1");
         AcknowledgedResponse delete = client.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
         System.out.println(delete);
         System.out.println(delete.isAcknowledged());*/

总结起来都是使用client.indices方法,add就是create , get查询,删除delete.非常简单

关于文件的操作也是一样

 /**新增 :index
   *  User user =new User(1,"九六","123","沙鸥昂","12");
        IndexRequest request = new IndexRequest("demo1");
        request.index("demo1").id("1001");
        ObjectMapper mapper = new ObjectMapper();
        String jsonString = mapper.writeValueAsString(user);
        request.source(jsonString, XContentType.JSON);
        IndexResponse indexResponse = restHighLevelClient.index(request, RequestOptions.DEFAULT);
        System.out.println(indexResponse.getResult()); */


 /**更新  ,局部,整体
  *  UpdateRequest updateRequest = new UpdateRequest();
  *          updateRequest.index("demo1").id("1001");
  *          updateRequest.
  *         doc(XContentType.JSON,"name","86"); //局部
  *
  *         UpdateResponse update = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
  *         System.out.println(update.getResult());
  * */

 /**查询 单条
  *   GetRequest getRequest= new GetRequest();
  getRequest.index("demo1").id("1001");
        GetResponse documentFields = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
        System.out.println(documentFields.getSource());
    */

        /**删除单条
         *
         *    DeleteRequest deleteRequest = new DeleteRequest();
         *         deleteRequest.index("demo1").id("1001");
         *         DeleteResponse delete = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
         *         System.out.println(delete.getResult());
         * */

新增就是直接使用client进行index请求,设置索引和文件id,将数据放到source中。

更新,update进行request请求,doc中设置相对应的文档的新field数据

查询单条一样,get,设置具体的索引和文档id。

删除就不多说了;

但是这些都是单条数据,下面的批量的和带条件的:

数据库的entity对象list集合 全部放入elastic

package com.jiuliu.controller;

import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jiuliu.entity.User;
import com.jiuliu.service.UserService;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;
import java.util.List;

@RestController
public class UserController {
     @Autowired
     private UserService userService;
     @Autowired
     private RestHighLevelClient restHighLevelClient;
    @GetMapping
    public String getAll() throws IOException {
        List<User> all = userService.getAll();
        //index : test_index;

        BulkRequest bulkRequest = new BulkRequest();
        for(User user: all){
            IndexRequest indexRequest = new IndexRequest().source(JSON.toJSONString(user), XContentType.JSON).index("test_index");
            bulkRequest.add(indexRequest);
        }

        BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);

          return bulkResponse.toString();
    }
}

批量的增加操作就是用bulk,十分简单,但是我没有给文档设置id,但是elasticSearch会自动生成文档的id

批量的删除也是一样的,不过需要添加想要的文档id;

批量的查询:这里的查询都是使用SearchReqeust,而取代前面的getRequest

      /**多条件查询
        **/
       SearchRequest  searchRequest = new SearchRequest("test_index");

        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
         boolQueryBuilder.should(QueryBuilders.matchQuery("username","北平"));
         boolQueryBuilder.should(QueryBuilders.matchQuery("username","第一"));


        // 构建高亮参数
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.field("username"); // 设置要高亮显示的字段
        highlightBuilder.preTags("<strong>"); // 设置高亮标签的前缀
        highlightBuilder.postTags("</strong>"); // 设置高亮标签的后缀

          //将高亮和查询条件放入
        searchRequest.source(new SearchSourceBuilder().query(boolQueryBuilder).highlighter(highlightBuilder));
         //执行查询
        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsMap());

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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
发出的红包

打赏作者

玖六儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值