springboot-2.7.3+ES-7.10.0

跟着官网走,能干99。一年几次变,次次不一样。刚部署好ES-6.8,又买阿里云Es-7.10.0根本忙不完。

做为JDK1.8最后一个版本。今天就拿新技术部署一套。致辞:大家以后就用这套好了。别轻易触发springboot3.0了

学习无止境:Dependency Versions

springboot-2.7.3+ES-7.10.0_第1张图片

一springboot干货:

pom文件配置:

 7.10.0
 
            org.elasticsearch
            elasticsearch
            ${elasticsearch.version}
        
        
            org.elasticsearch.client
            elasticsearch-rest-high-level-client
            ${elasticsearch.version}
        

一。直接干底层模版接口代码:

/**
 * description: Es基础功能组件
 **/
public interface ElasticsearchTemplate {
    /**
     * 通过Low Level REST Client 查询
     * @param request 原生查询对象
     */
    public Response request(Request request) throws Exception;

    /**
     * 新增索引
     * @param t 索引pojo
     */
    public boolean save(T t) throws Exception;

    /**
     * 新增索引(路由方式)
     * @param t 索引pojo
     * @param routing 路由信息(默认路由为索引数据_id)
     */
    public boolean save(T t,String routing) throws Exception;

    /**
     * 新增索引集合
     * @param list 索引pojo集合
     */
    public BulkResponse save(List list) throws Exception;

    /**
     * 新增索引集合(分批方式,提升性能,防止es服务内存溢出,每批默认5000条数据)
     * @param list 索引pojo集合
     */
    public BulkResponse[] saveBatch(List list) throws Exception;

    /**
     * 更新索引集合
     * @param list 索引pojo集合
     * @return
     * @throws Exception
     */
    public BulkResponse bulkUpdate(List list) throws Exception;
}

二。模版接口实现类:

@Component
public class ElasticsearchTemplateImpl implements ElasticsearchTemplate {
    private Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    RestHighLevelClient client;

    @Autowired
    ElasticsearchIndex elasticsearchIndex;


    @Override
    public Response request(Request request) throws Exception {
        Response response = client.getLowLevelClient().performRequest(request);
        return response;
    }

    @Override
    public boolean save(T t) throws Exception {
        return save(t,null);
    }

    @Override
    public boolean save(T t, String routing) throws Exception {
        MetaData metaData = elasticsearchIndex.getMetaData(t.getClass());
        String indexname = metaData.getIndexname();
        String id = Tools.getESId(t);
        IndexRequest indexRequest=new IndexRequest(indexname);;
        if (StringUtils.hasText(id)) {
            indexRequest.id(id);
        }
        JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(t));
        indexRequest.source(jsonObject);
        if(StringUtils.hasText(routing)){
            indexRequest.routing(routing);
        }
        IndexResponse indexResponse = null;
        indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);
        if (indexResponse.getResult() == DocWriteResponse.Result.CREATED) {
            logger.info("INDEX CREATE SUCCESS");
            elasticsearchIndex.rollover(t.getClass(),true);
        } else if (indexResponse.getResult() == DocWriteResponse.Result.UPDATED) {
            logger.info("INDEX UPDATE SUCCESS");
        } else {
            return false;
        }
        return true;
    }
}

三 。对外客户端提供接口:

/**
 * program: 对客户端提供api
 * description:
 **/
public interface ESCRepository {

    /**
     * 通过Low Level REST Client 查询
     */
    public Response request(Request request) throws Exception;


    /**
     * 新增索引
     * @param t
     */
    public boolean save(T t) throws Exception;

    /**
     * 新增索引集合
     * @param list
     */
    public BulkResponse save(List list) throws Exception;

    /**
     * 按照有值字段更新索引
     * @param t
     */
    public boolean update(T t) throws Exception;
}

四。对ES提供实现类:

/**
 * program: ESCRepository对外提供统一接口
 **/
public class SimpleESCRepository implements ESCRepository {
    private Class domainClass;
    private Class idClass;

    private ApplicationContext applicationContext;
    private ElasticsearchTemplate elasticsearchTemplate = null;

    public SimpleESCRepository(ApplicationContext applicationContext){
        this.applicationContext = applicationContext;
    }

    private ElasticsearchTemplate getElasticsearchTemplate(){
        return applicationContext.getBean(ElasticsearchTemplate.class);
    }

    @Override
    public Response request(Request request) throws Exception {
        return getElasticsearchTemplate().request(request);
    }

    @Override
    public boolean save(T o) throws Exception {
        return getElasticsearchTemplate().save(o);
    }

    @Override
    public BulkResponse save(List list) throws Exception {
        return getElasticsearchTemplate().save(list);
    }
}

    @Override
    public boolean update(T t) throws Exception {
        return getElasticsearchTemplate().update(t);
    }

    @Override
    public boolean updateCover(T t) throws Exception {
        return getElasticsearchTemplate().updateCover(t);
    }

写到现在终于把底层封装完毕。客户端如何调用

客户端实现接口:

public interface IndexRepository extends ESCRepository {
}

这就完了,你答对了,至此springboot+ES已经封装完成

直接controller接口测试:

    @Resource
    private IndexRepository indexRepository;
    @GetMapping("/demo/add")
    public String add() throws Exception {
        IndexEntity indexEntity = new IndexEntity ();
        indexEntity .setProposal_no("1");
        indexEntity .setAppli_name("a1");
        indexEntity .setRisk_code("aa1");
        indexEntity .setSum_premium(1);
        indexDemoRepository.save(indexEntity );
        return "新增成功";
    }
   @GetMapping("/demo/query")
    public List query() throws Exception {
        List search = indexDemoRepository.search(QueryBuilders.matchAllQuery());
        return search;
    }

一套掌法打出。查询结果到手

[
    {
        "proposal_no": "1",
        "risk_code": "aa1",
        "risk_name": null,
        "business_nature": null,
        "business_nature_name": null,
        "appli_code": null,
        "appli_name": "a1",
        "insured_code": null,
        "insured_name": null,
        "operate_date": null,
        "operate_date_format": null,
        "start_date": null,
        "end_date": null,
        "sum_amount": 0.0,
        "sum_premium": 1.0,
        "com_code": null
    }
]

能欣赏到这里说明你对ES的理解钢圈了。需要源码的欢迎加我V。10元

你可能感兴趣的:(ES,springboot,elasticsearch,搜索引擎,spring,boot)