【中间件】使用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 小时前
Docker安装Elasticsearch、kibana、IK分词器
elasticsearch·docker·kibana·ik分词器
刘逸潇20057 小时前
中间件与CORS(基于fastapi)
中间件·fastapi
呆呆小金人10 小时前
SQL入门:正则表达式-高效文本匹配全攻略
大数据·数据库·数据仓库·sql·数据库开发·etl·etl工程师
一棵树735110 小时前
Android OpenGL ES初窥
android·大数据·elasticsearch
_李小白10 小时前
【OPENGL ES 3.0 学习笔记】第九天:缓存、顶点和顶点数组
笔记·学习·elasticsearch
白鲸开源11 小时前
(二)从分层架构到数据湖仓架构:数据仓库分层下的技术架构与举例
大数据·数据库·数据分析
赵谨言11 小时前
基于Python楼王争霸劳动竞赛数据处理分析
大数据·开发语言·经验分享·python
阿里云大数据AI技术11 小时前
云栖实录 | DataWorks 发布下一代 Data+AI 一体化平台,开启企业智能数据新时代
大数据·人工智能
hunteritself13 小时前
阿里千问上线记忆,Manus 1.5 全栈升级,ChatGPT 将推成人模式!| AI Weekly 10.13-10.19
大数据·人工智能·深度学习·机器学习·chatgpt
INFINI Labs13 小时前
搜索百科(5):Easysearch — 自主可控的国产分布式搜索引擎
elasticsearch·搜索引擎·easysearch·国产替代·搜索百科