6を実際には知りませんでした。バージョンElasticSearchの担当者は、クラスターに接続するために推奨される9200クライアントと通信するために、このポート9300を推奨していません。反復ES ES自体が、ポート9300コースをすぐに削除する可能性があるためです。ただし、実際の環境で単一ノードを使用することはお勧めしません
X-packを使用してESクラスターに接続します(ここではSpringBootを使用します)
1.ポン座標
<!--x-pack-->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>x-pack-transport</artifactId>
<version>5.3.3</version>
</dependency>
<!--es连接客户端-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<exclusions>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--log4j-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.7</version>
</dependency>
2.ymlファイルの書き込み
#ES 集群配置(version:5.3.3)
elasticSearch:
host: es-cn-*************.public.elasticsearch.aliyuncs.com
port: 9300
cluster-name: ************
user.password: elastic:*******
3.ES構成クラスを記述します
package com.search.config;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.xpack.client.PreBuiltXPackTransportClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.net.InetAddress;
import java.net.UnknownHostException;
@Configuration
public class ElasticsearchConfig {
/**
* es集群读取路径
*/
public static final String X_PACK_ES_NAME = "cluster.name";
/**
* x-pack用户名密码读取路径
*/
public static final String X_PACK_USER = "xpack.security.user";
@Value("${elasticSearch.cluster-name}")
private String esClusterName;
@Value("${elasticSearch.host}")
private String esHost;
@Value("${elasticSearch.port}")
private int esPort;
@Value("${elasticSearch.user.password}")
private String esUserPassword;
private final Logger LOGGER = LoggerFactory.getLogger(ElasticsearchConfig.class);
/**
* elasticsearch客户端注入(配置)
*
* @return
* @throws UnknownHostException
*/
@Bean
public TransportClient transportClient() throws UnknownHostException {
TransportClient client = new PreBuiltXPackTransportClient(Settings.builder()
.put(X_PACK_ES_NAME, esClusterName) //替换为对应阿里云Elasticsearch实例的ID
.put(X_PACK_USER, esUserPassword) //阿里云Elasticsearch实例的用户名、密码
.put("client.transport.sniff", false) //设置sniff为false
.build())
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(esHost), esPort));
return client;
}
}
注:Alibaba Cloudの公式ドキュメントを参照できますが、バージョンの問題に注意を払う必要があります。バージョンの問題は、x-packのSpringBoot開発にとって非常に致命的です。この種の問題は当時、私は個人的にmvn- Treeを見て、相互に依存するバージョン全体を調べてから、Mavenローカルウェアハウスのアドレスを変更して再度ダウンロードしました。これは頭痛の種です。デモで接続を完了できることは明らかですが、Configurationでプロジェクトに挿入すると、機能しません。このメソッドは引き続きElasticTemplateをサポートします。このメソッドは、@ Documentの開発もサポートします。個人的には、このメソッドはClientメソッドよりもはるかに単純ですが、公式は9300の使用を推奨していないため、結局のところこれには理由があります。このメソッドは確かに安全ではありません。x-packは2017年に保守されなくなりました。まだ多くの未知の問題があります。 .Alibaba Cloudは現在、5.3.3でのみこの接続方法をサポートしています。残りはすべて通信に9200を使用しています。TCPはサポートされていません。