【中间件】使用ElasticSearch提供的RestClientAPI操作ES

一、简介

ElasticSearch提供了RestClient来操作ES,包括对数据的增删改查,可参照官方文档:Java High Level REST Client

二、使用步骤:

可参照官方文档操作

  1. 导包
bash 复制代码
<dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.16.2</version>
        </dependency>
    </dependencies>
  1. 写配置
    官方文档Initialization中配置如下,指明了要操作的ES所在的服务器地址和端口号
bash 复制代码
RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(
                new HttpHost("localhost", 9200, "http"),
                new HttpHost("localhost", 9201, "http")));

由于我们经常用到该对象,如果每次都写一遍的话会很麻烦,代码冗余,因此我们可一在配置类中创建好该bean,并将其放到容器中,要使用时,用@Autowried自动注入就行,具体配置如下:

bash 复制代码
@Configuration
public class EsConfig {

    public static final RequestOptions COMMON_OPTIONS;
    static {
        RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
//        builder.addHeader("Authorization", "Bearer " + TOKEN);
//        builder.setHttpAsyncResponseConsumerFactory(
//                new HttpAsyncResponseConsumerFactory
//                        .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));
        COMMON_OPTIONS = builder.build();
    }

    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("192.168.195.131", 9200, "http")));
        return client;
    }
}
  1. 业务使用
    例如,将数据批量保存至ES中,RestHighLevelClient中提供了所有对ES进行操作的方法:
bash 复制代码
@Slf4j
@Service
public class ProductSaveServiceImpl implements ProductSaveService {

    @Autowired
    RestHighLevelClient restHighLevelClient;
    @Override
    public boolean productStatusUp(List<SkuEsModel> skuEsModels) throws IOException {
        // 1、在es中建立一个索引,建立好映射关系--在es中执行put product即可
        // 2、保存数据到es   BulkRequest bulkRequest, RequestOptions options
        BulkRequest bulkRequest = new BulkRequest();
        skuEsModels.forEach(skuEsModel -> {
            IndexRequest indexRequest = new IndexRequest(EsConstant.PRODUCT_INDEX);
            indexRequest.id(skuEsModel.getSkuId().toString());
            indexRequest.source(JSON.toJSONString(skuEsModel), XContentType.JSON);
            bulkRequest.add(indexRequest);
        });
        BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, EsConfig.COMMON_OPTIONS);
        // 处理上架错误,记录到日志
        List<String> errors = Arrays.stream(bulk.getItems()).map(BulkItemResponse::getId).collect(Collectors.toList());
        log.info("商品上架完成:{}", errors);
        return bulk.hasFailures();
    }
}
相关推荐
蜡笔削薪6 分钟前
财联支付异地拓展商户的区域限制是否符合监管规定?
大数据·python
2601_9571909032 分钟前
飞行影院安装施工指南:场地、动感系统与影片内容配套
大数据·前端·人工智能
ACP广源盛1392462567344 分钟前
IX9104 PCIe5.0 交换芯片@ACP#国产高端 AI PC 全搭配方案
大数据·人工智能·分布式·单片机·嵌入式硬件
讯展互联2 小时前
实体业态运营效率分析:装修门店投放自主与外包的人力模型对比
大数据·网络·经验分享·创业创新·学习方法
人民新视野2 小时前
2026防尘口罩品牌推荐:三大防尘口罩品牌实用指南
大数据
Lucky_luckyZzz2 小时前
销售会话分析与智能工牌实测红榜:灵听工牌如何成为B2B销售效率提升的选型标杆?
大数据·人工智能
江瀚视野3 小时前
京东快递推行业首个寄文件证照送保价,京东如何改变市场?
大数据
万点科技码农4 小时前
2025年7月11日行业热点解读:定制软件开发与AI工作流重构一体化趋势
大数据·人工智能·重构
Regentsoft丽晶软件4 小时前
从“等客进店”到“上门成交”:服装门店移动POS离店收银的完整业务流程2026
大数据·经验分享·用户运营·零售
dayuOK63074 小时前
AI Agent市场爆发:从“试一试”到“离不开”,只用了不到一年
大数据·人工智能·ai作画·新媒体运营·aigc·ai写作