elasticsearch(6.2.4)java客户端开发代码示例

本文介绍了如何在Java项目中使用Elasticsearch 6.2.4版本进行开发,包括在pom.xml中添加依赖,创建索引的步骤及其实现,以及搜索接口和相关实现类的详细代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步在pom中引入依赖

 <dependency>
      <groupId>org.elasticsearch.client</groupId>
      <artifactId>transport</artifactId>
      <version>6.2.4</version>
  </dependency>
  <dependency>
      <groupId>org.elasticsearch</groupId>
      <artifactId>elasticsearch</artifactId>
      <version>6.2.4</version>
  </dependency> 

第二步java客户端相关代码

package com.talkweb.common.es;

import com.talkweb.common.config.properties.ElasticsearchProperties;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequest;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse;
import org.elasticsearch.action.bulk.*;
import org.elasticsearch.action.support.WriteRequest.RefreshPolicy;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.IndicesAdminClient;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.unit.ByteSizeUnit;
import org.elasticsearch.common.unit.ByteSizeValue;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.ExecutionException;

/**
 * ES工具
 * mengz
 */
public class EsHelper {
    private static final Logger logger = LoggerFactory.getLogger(EsHelper.class);

    private static IndicesAdminClient adminClient;
    private static TransportClient transportClient;

    /**
     * 获取连接对象
     *
     * @return
     */
    public static TransportClient getClient(ElasticsearchProperties elasticsearchProperties) {
        if (null == transportClient) {
            logger.info("addr======>" + elasticsearchProperties.getEsHost());
            logger.info("port======>" + elasticsearchProperties.getEsPort());
            logger.info("indexName======>" + elasticsearchProperties.getEsIndexName());
            logger.info("indexType======>" + elasticsearchProperties.getEsIndexType());
            logger.info("cluster======>" + elasticsearchProperties.getEsCluster());
            Settings settings = Settings.builder().put("cluster.name", elasticsearchProperties.getEsCluster()).build();
            try {
                transportClient = new PreBuiltTransportClient(settings).
                        addTransportAddress(new TransportAddress(InetAddress.getByName(elasticsearchProperties.getEsHost()), Integer.valueOf(elasticsearchProperties.getEsPort())));
                adminClient = transportClient.admin().indices();
            } catch (UnknownHostException e) {
                logger.error("获取es连接失败:host:" + elasticsearchProperties.getEsHost() + "  port:" + elasticsearchProperties.getEsPort() + "  cluster:" + elasticsearchProperties.getEsCluster());
                e.printStackTrace();
            }
        }
        return transportClient;
    }

    /**
     * 判断索引是否已经存在
     *
     * @param index
     * @return
     */
    public boolean indexExists(String index) {
        IndicesExistsRequest request = new IndicesExistsRequest(index);
        IndicesExistsResponse response = adminClient.exists(request).actionGet();
        if (response.isExists()) {
            return true;
        }
        return false;
    }


    // 创建索引
    public void createIndex(String indexName) {
        transportClient.admin().indices().create(new CreateIndexRequest(indexName)).actionGet();
    }

    /**
     * 批量处理器
     * 默认情况下BulkProcessor:
     * 将bulkActions设置为 1000
     * 将bulkSize设置为 5mb
     * 不设置flushInterval
     * 将concurrentRequests设置为1,这意味着刷新操作的异步执行。
     * 将backoffPolicy设置为指数退避,重试次数为8次,启动延迟为50ms。总等待时间约为5.1秒。
     *
     * @param client
     * @return
     */
    public static BulkProcessor getBulkProcessor(TransportClient client) {
        final BulkProcessor bulkProcessor = BulkProcessor.builder(client, new BulkProcessor.Listener() {
            @Override
            public void beforeBulk(long executionId, BulkRequest request) {
            }

            @Override
            public void afterBulk(long executionId, BulkRequest request, BulkResponse response) {
            }

            @Override
            public void afterBulk(long executionId, BulkRequest request, Throwable failure) {
            }
        }).setBulkActions(1000).setBulkSize(new ByteSizeValue(5, ByteSizeUnit.MB))
                .setFlushInterval(TimeValue.timeValueSeconds(1L)).setConcurrentRequests(1)
                .setBackoffPolicy(BackoffPolicy.exponentialBackoff(TimeValue.timeValueMillis(100), 3)).build();
        return bulkProcessor;
    }

    /**
     * 更新索引
     *
     * @return
     * @throws IOException
     */
    public UpdateResponse updateIndex(UpdateRequest updateRequest) throws IOException, ExecutionException, InterruptedException {
        return transportClient.update(updateRequest).get();
    }


    /**
     * 批量更新
     *
     * @param updateRequests
     */
    public static String bulkUpdate(List<UpdateRequest> updateRequests) {
        BulkRequestBuilder bulkRequest = transportClient.prepareBulk()
                .setRefreshPolicy(RefreshPolicy.IMMEDIATE);
        Iterator bulkResponse = updateRequests.iterator();

        while (bulkResponse.hasNext()) {
            UpdateRequest updateRequest = (UpdateRequest) bulkResponse.next();
            bulkRequest.add(updateRequest);
        }

        BulkResponse var9 = (BulkResponse) bulkRequest.execute().actionGet();
        HashMap var10 = new HashMap();
        StringBuilder sb = new StringBuilder();
        if 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值