猿问

Elasticsearch TransportClient 连接 [Java]

我在使用Maven 的Java 项目中使用Elasticsearch:


...

 <elasticsearch.version>6.7.0</elasticsearch.version>

...

    <!-- Elasticsearch -->

    <dependency>

        <groupId>org.elasticsearch</groupId>

        <artifactId>elasticsearch</artifactId>

        <version>${elasticsearch.version}</version>

    </dependency>


    <dependency>

        <groupId>org.elasticsearch.client</groupId>

        <artifactId>transport</artifactId>

        <version>${elasticsearch.version}</version>

    </dependency>


    <dependency>

        <groupId>org.elasticsearch.plugin</groupId>

        <artifactId>transport-netty4-client</artifactId>

        <version>${elasticsearch.version}</version>

    </dependency>


    <dependency>

        <groupId>org.apache.logging.log4j</groupId>

        <artifactId>log4j-to-slf4j</artifactId>

        <version>2.8.2</version>

    </dependency>

    <!-- Elasticsearch -->        

当我尝试初始化 TransportClient 以便为文档编制索引时,出现错误:


    NoNodeAvailableException[None of the configured nodes are available: 

    [{#transport#-1}{BHMBbfcrSUOM_Pyaf1LcnA}{localhost}{127.0.0.1:9300}]]

也许需要在 config/elasticsearch.yaml 中添加更多关于传输的信息,或者当前配置是错误的。


Java代码:


    TransportAddress address;

    TransportClient client;

    Settings settings;


    try {

        address = new TransportAddress(InetAddress.getByName("localhost"), 9300);

        settings = Settings

                    .builder()

                    .put("cluster.name", "lib2life")

                    .put("client.transport.sniff", true)

                    .build();


        /* Initiate Transport Client */

        client = new PreBuiltTransportClient(settings)

                    .addTransportAddress(address);


    }


隔江千里
浏览 118回答 2
2回答

神不在的星期二

我解决了这个问题。问题是我使用的是带有 TransportClient 的 Elasticsearch 6.7.0 版本,它已被弃用并被 RestHighLevelClient 取代。此外,我必须使用端口 9200 并取消注释 http.port: 9200 和 discovery.seed_hosts: ["host1", "host2"] from elasticsearch.yaml

精慕HU

问题在于您的端口配置,您正在使用端口9300进行 REST 调用,该端口实际上用于 elasticsearch 集群中的节点间通信。请更改下面的 java 代码以使用该端口9200。address = new TransportAddress(InetAddress.getByName("localhost"), 9200);
随时随地看视频慕课网APP

相关分类

Java
我要回答