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
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玖六儿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值