0
点赞
收藏
分享

微信扫一扫

掌控你的Mac性能:System Dashboard Pro,一款专业的系统监视器

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

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

学习无止境:Dependency Versions

一springboot干货:

pom文件配置:

 <elasticsearch.version>7.10.0</elasticsearch.version>
 <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>${elasticsearch.version}</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>${elasticsearch.version}</version>
        </dependency>

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

/**
 * description: Es基础功能组件
 **/
public interface ElasticsearchTemplate<T,M> {
    /**
     * 通过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<T> list) throws Exception;

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

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

二。模版接口实现类:

@Component
public class ElasticsearchTemplateImpl<T, M> implements ElasticsearchTemplate<T, M> {
    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<T,M> {

    /**
     * 通过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<T> list) throws Exception;

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

四。对ES提供实现类:

/**
 * program: ESCRepository对外提供统一接口
 **/
public class SimpleESCRepository<T,M> implements ESCRepository<T,M> {
    private Class<T> domainClass;
    private Class<M> 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<T> 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<IndexEntity,String> {
}

这就完了,你答对了,至此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<IndexDemo> query() throws Exception {
        List<IndexDemo> 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元

举报

相关推荐

0 条评论