使用RestHighLevelClient-6.4.0客户端实现ES增删改查-操作工具类简单封装

maven依赖,使用了RestHighLevelClient6.4.0版本

        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>6.4.0</version>
        </dependency>

首先RestHighLevelClient配置,采用注入方式,启动就注册客户端bean

@Configuration
public class ESHighLevelRestClient {

    public static final int CONNECT_TIMEOUT = 5000;
    public static final int SOCKET_TIMEOUT = 60000;
    public static final int MAX_RETRY_TIMEOUT = 60000;
    public static final int WORK_THREADS = Runtime.getRuntime().availableProcessors();
    private final String authEnable = "enable";
    // 配置类,里面配置了es的地址,用户,密码
    @Autowired
    private ElasticsearchConfig elasticsearchConfig;

    @Bean
    public RestHighLevelClient restHighLevelClient() throws UnsupportedEncodingException {

        ArrayList<HttpHost> httpHosts = Lists.newArrayList();

        Map<String, String> hostsMap = Splitter.on(',').trimResults().omitEmptyStrings()
                .withKeyValueSeparator(":")
                .split(elasticsearchConfig.getHosts());

        hostsMap.entrySet().stream().forEach(x -> {
            httpHosts.add(new HttpHost(x.getKey(), Integer.valueOf(x.getValue()), "http"));
        });

        RestClientBuilder restClientBuilder = RestClient.builder(httpHosts.toArray(new HttpHost[httpHosts.size()]));

        // set es connection timeout
        restClientBuilder.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
            @Override
            public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {
                return requestConfigBuilder
                        .setConnectTimeout(CONNECT_TIMEOUT)
                        .setSocketTimeout(SOCKET_TIMEOUT);
            }
        }).setMaxRetryTimeoutMillis(MAX_RETRY_TIMEOUT);

        // set es client works numbers
        restClientBuilder.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
            @Override
            public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                return httpClientBuilder.setDefaultIOReactorConfig(
                        IOReactorConfig.custom().setIoThreadCount(WORK_THREADS).build());
            }
        });

        if (authEnable.equalsIgnoreCase(elasticsearchConfig.getAuth())) {
            Header[] defaultHeaders = new Header[]{new BasicHeader("Authorization", getToken(elasticsearchConfig.getUsername(), elasticsearchConfig.getPassword()))};
            restClientBuilder.setDefaultHeaders(defaultHeaders);
        }

        return new RestHighLevelClient(restClientBuilder);
    }

    private String getToken(String username, String password) throws UnsupportedEncodingException {
        StringBuilder tokenBuilder = new StringBuilder();
        tokenBuilder.append(username);
        tokenBuilder.append(":");
        tokenBuilder.append(password);
        String token = new String(Base64.getEncoder().encode(tokenBuilder.toString().getBytes()), StandardCharsets.UTF_8);
        return "Basic " + token;
    }
}

封装abstract类,想要操作ES的实体需要继承这个类,重写packageElasticSearchBody()方法,封装查询条件

@Getter
@Setter
public abstract class BaseElasticSearchEntity {

    /**
     * ES的INDEX
     */
    private String esIndex;
    /**
     * ES的TYPE
     */
    private String esType;
    /**
     * ES唯一值ID
     */
    private String esId;

    protected BaseElasticSearchEntity() {
    }

    protected BaseElasticSearchEntity(String esIndex, String esType) {
        this.esIndex = esIndex;
        this.esType = esType;
    }

    protected BaseElasticSearchEntity(String esIndex, String esType, String esId) {
        this.esIndex = esIndex;
        this.esType = esType;
        this.esId = esId;
    }

    /**
     * 供子类封装查询条件
     *
     * @param boolQueryBuilder bool条件
     */
    public abstract void packag
RestHighLevelClientElasticsearch官方提供的Java客户端,用于与Elasticsearch进行增删改查操作。据引用中的Maven依赖所示,使用RestHighLevelClient需要引入elasticsearch-rest-high-level-client库,并指定版本号为6.4.0。 对于RestHighLevelClient增删改查操作,可以通过调用相应的方法来实现。具体的操作方法包括: 1. 增加(Indexing):使用RestHighLevelClient的index方法将文档添加到Elasticsearch索引中。可以传递一个文档的JSON字符串或者一个Map对象作为参数,指定文档的索引、类型和唯一标识ID。此操作会创建一个新的文档或更新已存在的文档。 2. 更新(Updating):使用RestHighLevelClient的update方法更新已存在的文档。可以传递一个文档的JSON字符串、一个Map对象或者一个XContentBuilder对象作为参数,指定需要更新的文档的索引、类型和唯一标识ID。 3. 删除(Deleting):使用RestHighLevelClient的delete方法删除指定索引、类型和唯一标识ID的文档。 4. 查询(Searching):使用RestHighLevelClient的search方法进行查询操作。可以传递一个SearchRequest对象作为参数,该对象包含查询的详细信息,例如查询条件、排序、过滤等。执行查询后,可以通过SearchResponse对象获取查询结果。 以上是使用RestHighLevelClient进行增删改查的基本操作方法。根据具体需求,可以结合引用中的返回值封装实体ElasticSearchResponseEntity进行结果的封装和处理。引用中提到的直接调用service层的接口传入封装的实体或唯一ID即可操作ES增删改查。 需要注意的是,具体的操作代码需要根据项目的具体需求和业务逻辑进行编写。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [使用RestHighLevelClient-6.4.0客户端实现ES增删改查-操作工具类简单封装](https://blog.csdn.net/weixin_36440307/article/details/108239400)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值