springboot集成ES[单机极简版]

1.导入依赖,在yml中写下es配置
(1) 在项目pom中导入依赖
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

(2) 在application.yml配置文件中配置ES所需参数
elasticSearch:
  host: 111.504.189.94:9200

注:
1.spring-boot-dependencies.pom里本身自带了elasticsearch,这里引用即可
2.yml中配置参数名称,纯属自定义,无特殊含义
2.创建配置类[这里仅做最简单配置,连接上单机ES]

import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.client.ClientConfiguration;
import org.springframework.data.elasticsearch.client.RestClients;

@Configuration
public class RestClientConfig {

    @Value("${elasticSearch.host}")
    private String esIp;

    @Bean
    public RestHighLevelClient elasticsearchClient() {
        ClientConfiguration clientConfiguration = ClientConfiguration.builder()
                .connectedTo(esIp)
                .build();
        return RestClients.create(clientConfiguration).rest();
    }

}
3.附上一个简化版工具类,复杂的可以自己写或者搜索下找找

import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.MatchAllQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
*   ES自废弃type之后, index 类似 表, document 类似 行, id 类似 行主键
* */
@Component
public class EsUtils {

    @Resource
    private RestHighLevelClient restHighLevelClient; 

    // 添加单个 | 指定index,添加一行数据(仅限单个实体类,Map对象)
    public int addIndexDocument(String index,Object data){
        int status = 0;
        try {
            IndexRequest indexRequest = new IndexRequest().index(index);
            if (!(data instanceof Map)) {
                BeanMap beanMap = BeanMap.create(data);
                indexRequest.source(beanMap);
            }else{
                indexRequest.source((Map) data);
            }
            IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
            status = indexResponse.status().getStatus();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return status;
    }

    // 删除单个 | 指定index,及index中对应主键 _id值, 删除一条数据
    public int deleteDocumentById(String index,String _id) {
        //参数1: 索引  参数2:类型  参数3:删除id
        int status = 0;
        try {
            DeleteRequest deleteRequest = new DeleteRequest().index(index).id(_id);
            DeleteResponse deleteResponse = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
            status = deleteResponse.status().getStatus();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return status;
    }

    // 更新单个 | 指定index,及index中对应主键 _id值, 修改一条数据
    public int updateDocumentById(String index,String _id,Object data) {
        int status = 0;
        try {
            UpdateRequest updateRequest = new UpdateRequest().index(index).id(_id);
            if (!(data instanceof Map)) {
                BeanMap beanMap = BeanMap.create(data);
                updateRequest.doc(beanMap);
            }else{
                updateRequest.doc((Map) data);
            }
            UpdateResponse updateResponse = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
            status = updateResponse.status().getStatus();
        } catch (IOException e) { // 如果_id不存在,会抛出异常
            return status;
        }
        return status;
    }

    // 批量添加 | 注: bulkRequest.add(),可以加入多种操作一起, bulkRequest.add(添加),bulkRequest.add(修改),bulkRequest.add(删除) 都可以一起
    public int multiUpdateDocument(String index,List<Object> data) {
        int status = 0;
        try {
            BulkRequest bulkRequest = new BulkRequest();
            for (int i = 0; i < data.size(); i++) {
                IndexRequest indexRequest = new IndexRequest().index(index);
                if (!(data.get(i) instanceof Map)) {
                    BeanMap beanMap = BeanMap.create(data.get(i));
                    indexRequest.source(beanMap);
                } else {
                    indexRequest.source((Map)data.get(i));
                }
                bulkRequest.add(indexRequest);
            }
            BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
            status = bulkResponse.status().getStatus();
        } catch (IOException e) {
            e.printStackTrace();
            return status;
        }
        return status;
    }

    /**
    * 普通条件查询
    *   index: 索引
     *  mQuery:查询条件
     *  filter: 过滤条件
     *  sortFiled: 排序字段
     *  order: 排序顺序[DESC/ASC]
     *  from: 起始条数
     *  size: 每页展示记录
    * */
    public List<Map<String, Object>> querySearch(String index, MatchAllQueryBuilder mQuery,MatchAllQueryBuilder filter,String sortFiled,SortOrder order,int from,int size) throws IOException {
        // 最终结果返回 - 可自定义
        List<Map<String, Object>> maps = new ArrayList<>();

        SearchRequest searchRequest = new SearchRequest(index);  // 创建搜索对象

        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); // 搜索构建对象[条件限制]
        if (mQuery != null) searchSourceBuilder.query(mQuery);//执行查询条件
        if (filter != null) searchSourceBuilder.postFilter(filter); //过滤条件
        searchSourceBuilder.from(from)//起始条数
                .size(size)//每页展示记录
                .sort(sortFiled, order)//排序
                .highlighter(new HighlightBuilder().field("*").requireFieldMatch(false));//高亮

        searchRequest.source(searchSourceBuilder); // 创建搜索请求

        // 开始搜索
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println("结果总数: " + searchResponse.getHits().getTotalHits());

        // 结果集合
        SearchHit[] hits = searchResponse.getHits().getHits();
        for (SearchHit hit : hits) {
            Map<String, Object> sourceAsMap = hit.getSourceAsMap(); // 结果集以Map接收
            maps.add(sourceAsMap);
        }
        return maps;
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值