java程序操作ES索引

使用

package com.ampthon.es;

import com.ampthon.base.Base;
import com.ampthon.utils.DateUtil;

import java.io.IOException;

/**
 * @author chun
 * @date 2023/3/2 15:39
 */
public class CreateESIndex {
    private static String index;
    private static String delete_index;

    /**
     * 创建索引写都spark任务里,报错依赖冲突,所以单独提出来实现
     *
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) {
        String yesterday = args[0];
        if ("day".equals(args[1])) {
            index = ES_INDEX_PROXY_DAY + "-" + yesterday;
            delete_index = ES_INDEX_PROXY_DAY + "-" + DateUtil.getDayBefore(yesterday, 7);
        } else if ("all".equals(args[1])) {
            index = ES_INDEX_PROXY_ALL + "-" + yesterday;
            delete_index = ES_INDEX_PROXY_ALL + "-" + DateUtil.getDayBefore(yesterday, 7);
        } else {
            System.out.println("创建索引失败,传入的参数有误!");
            return;
        }

        ElasticSearchClient client = null;
        try {
            //创建ES索引
            client = new ElasticSearchClient();
            boolean createFlag = client.createIndex(index, Base.ES_NUMBER_OF_SHARDS, Base.ES_NUMBER_OF_REPLICAS);
            if (!createFlag) {
                System.out.println("创建索引失败,索引已存在!");
            }

            //删除七天前的ES索引
            boolean aBoolean = client.deleteIndex(delete_index);
            if (!aBoolean) {
                System.out.println("删除索引失败,索引不存在!");
            }
        } catch (Exception e) {
            System.out.println("创建/删除索引出现异常,请检查!");
            e.printStackTrace();
        } finally {
            if (client != null) {
                try {
                    client.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

    }
}


客户端类

package com.ampthon.es;

import com.ampthon.base.Base;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.settings.Settings;

import java.io.IOException;

/**
 * @author chun
 * @date 2023/3/2 9:57
 */
public class ElasticSearchClient {

    private RestHighLevelClient client = null;

    public ElasticSearchClient() {
        this.client = restHighLevelClient();
    }

    public RestHighLevelClient restHighLevelClient() {
        BasicCredentialsProvider basicCredentialsProvider = new BasicCredentialsProvider();
        basicCredentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(Base.ES_USER, Base.ES_PWD));

        return new RestHighLevelClient(
                RestClient
                        .builder(Base.ES_NODES_HTTPHOST.toArray(new HttpHost[]{}))
                        .setHttpClientConfigCallback(httpClientBuilder -> {
                            httpClientBuilder.disableAuthCaching();
                            return httpClientBuilder.setDefaultCredentialsProvider(basicCredentialsProvider);
                        })
        );
    }

    public boolean createIndex(String index, int shards, int replicas) throws IOException {
        GetIndexRequest getindexRequest = new GetIndexRequest(index);
        if (!client.indices().exists(getindexRequest, RequestOptions.DEFAULT)) {
            CreateIndexRequest indexRequest = new CreateIndexRequest(index);
            indexRequest.settings(Settings.builder()
                    .put("index.number_of_shards", shards)   //分片数设置为集群节点数*[1.5-3],目前集群28节点,也就是设置[42-84]个
                    .put("index.number_of_replicas", replicas) //设置每个分片的副本数
                    .build()
            );
            CreateIndexResponse createIndexResponse = client.indices().create(indexRequest, RequestOptions.DEFAULT);
            System.out.println("创建索引" + index + ":" + createIndexResponse.index());
            return true;
        }

        return false;
    }

    public boolean deleteIndex(String index) throws IOException {
        GetIndexRequest getindexRequest = new GetIndexRequest(index);
        if (client.indices().exists(getindexRequest, RequestOptions.DEFAULT)) {
            DeleteIndexRequest indexRequest = new DeleteIndexRequest(index);
            AcknowledgedResponse delete = client.indices().delete(indexRequest, RequestOptions.DEFAULT);
            System.out.println("删除索引" + index + ":" + delete.isAcknowledged());
            return true;
        }
        return false;
    }

    public void close() {
        if (client != null) {
            try {
                client.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}


你可能感兴趣的:(java,elasticsearch)