過去1時間でelasticsearch 1.3.2をダウンロードしてインストールしたところ
ポート9200および9300:9400にIPテーブルを開きました
/ etc/hostsにコンピューター名とIPを設定します
ヘッドモジュールと救急救命士がインストールされ、スムーズに動作します
localhostのcurlは完璧に動作します
ダウンロードからすべてのjarをEclipseにコピーしたため、同じバージョンのクライアント
-Java-
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilders;
public class Test{
public static void main(String[] args) {
Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "elastictest").build();
TransportClient transportClient = new TransportClient(settings);
Client client = transportClient.addTransportAddress(new InetSocketTransportAddress("143.79.236.xxx",9300));//just masking ip with xxx for SO Question
try{
SearchResponse response = client.prepareSearch().setQuery(QueryBuilders.matchQuery("url", "Twitter")).setSize(5).execute().actionGet();//bunch of urls indexed
String output = response.toString();
System.out.println(output);
}catch(Exception e){
e.printStackTrace();
}
client.close();
}
}
-出力-
log4j:WARN No appenders could be found for logger (org.elasticsearch.plugins).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.Apache.org/log4j/1.2/faq.html#noconfig for more info.
org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []
at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.Java:298)
at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.Java:214)
at org.elasticsearch.client.transport.support.InternalTransportClient.execute(InternalTransportClient.Java:105)
at org.elasticsearch.client.support.AbstractClient.search(AbstractClient.Java:330)
at org.elasticsearch.client.transport.TransportClient.search(TransportClient.Java:421)
at org.elasticsearch.action.search.SearchRequestBuilder.doExecute(SearchRequestBuilder.Java:1097)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.Java:91)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.Java:65)
at Test.main(Test.Java:20)
更新:今、私は本当に混乱しています。 Eclipseでrunを3回押しました。上記のエラーを2回受け取りました。 1回検索が機能しました!??真新しいCentos 6.5 vps、真新しいjdkがインストールされています。次にelasticsearchをインストールしましたが、他には何もしていません。
更新:./bin/elasticsearchコンソールの実行後
[2014-09-18 08:56:13,694][INFO ][node ] [Acrobat] version[1.3.2], pid[2978], build[dee175d/2014-08-13T14:29:30Z]
[2014-09-18 08:56:13,695][INFO ][node ] [Acrobat] initializing ...
[2014-09-18 08:56:13,703][INFO ][plugins ] [Acrobat] loaded [], sites [head, paramedic]
[2014-09-18 08:56:15,941][WARN ][common.network ] failed to resolve local Host, fallback to loopback
Java.net.UnknownHostException: elasticsearchtest: elasticsearchtest: Name or service not known
at Java.net.InetAddress.getLocalHost(InetAddress.Java:1473)
at org.elasticsearch.common.network.NetworkUtils.<clinit>(NetworkUtils.Java:54)
at org.elasticsearch.transport.netty.NettyTransport.<init>(NettyTransport.Java:204)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:57)
at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
at Java.lang.reflect.Constructor.newInstance(Constructor.Java:526)
at org.elasticsearch.common.inject.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.Java:54)
at org.elasticsearch.common.inject.ConstructorInjector.construct(ConstructorInjector.Java:86)
at org.elasticsearch.common.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.Java:98)
at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.Java:45)
at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.Java:837)
at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.Java:42)
at org.elasticsearch.common.inject.Scopes$1$1.get(Scopes.Java:57)
at org.elasticsearch.common.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.Java:45)
at org.elasticsearch.common.inject.FactoryProxy.get(FactoryProxy.Java:52)
at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.Java:45)
at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.Java:837)
at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.Java:42)
at org.elasticsearch.common.inject.Scopes$1$1.get(Scopes.Java:57)
at org.elasticsearch.common.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.Java:45)
at org.elasticsearch.common.inject.SingleParameterInjector.inject(SingleParameterInjector.Java:42)
at org.elasticsearch.common.inject.SingleParameterInjector.getAll(SingleParameterInjector.Java:66)
at org.elasticsearch.common.inject.ConstructorInjector.construct(ConstructorInjector.Java:85)
at org.elasticsearch.common.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.Java:98)
at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.Java:45)
at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.Java:837)
at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.Java:42)
at org.elasticsearch.common.inject.Scopes$1$1.get(Scopes.Java:57)
at org.elasticsearch.common.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.Java:45)
at org.elasticsearch.common.inject.SingleParameterInjector.inject(SingleParameterInjector.Java:42)
at org.elasticsearch.common.inject.SingleParameterInjector.getAll(SingleParameterInjector.Java:66)
at org.elasticsearch.common.inject.ConstructorInjector.construct(ConstructorInjector.Java:85)
at org.elasticsearch.common.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.Java:98)
at org.elasticsearch.common.inject.FactoryProxy.get(FactoryProxy.Java:52)
at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.Java:45)
at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.Java:837)
at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.Java:42)
at org.elasticsearch.common.inject.Scopes$1$1.get(Scopes.Java:57)
at org.elasticsearch.common.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.Java:45)
at org.elasticsearch.common.inject.SingleParameterInjector.inject(SingleParameterInjector.Java:42)
at org.elasticsearch.common.inject.SingleParameterInjector.getAll(SingleParameterInjector.Java:66)
at org.elasticsearch.common.inject.ConstructorInjector.construct(ConstructorInjector.Java:85)
at org.elasticsearch.common.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.Java:98)
at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.Java:45)
at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.Java:837)
at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.Java:42)
at org.elasticsearch.common.inject.Scopes$1$1.get(Scopes.Java:57)
at org.elasticsearch.common.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.Java:45)
at org.elasticsearch.common.inject.InjectorBuilder$1.call(InjectorBuilder.Java:200)
at org.elasticsearch.common.inject.InjectorBuilder$1.call(InjectorBuilder.Java:193)
at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.Java:830)
at org.elasticsearch.common.inject.InjectorBuilder.loadEagerSingletons(InjectorBuilder.Java:193)
at org.elasticsearch.common.inject.InjectorBuilder.injectDynamically(InjectorBuilder.Java:175)
at org.elasticsearch.common.inject.InjectorBuilder.build(InjectorBuilder.Java:110)
at org.elasticsearch.common.inject.Guice.createInjector(Guice.Java:93)
at org.elasticsearch.common.inject.Guice.createInjector(Guice.Java:70)
at org.elasticsearch.common.inject.ModulesBuilder.createInjector(ModulesBuilder.Java:59)
at org.elasticsearch.node.internal.InternalNode.<init>(InternalNode.Java:192)
at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.Java:159)
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.Java:70)
at org.elasticsearch.bootstrap.Bootstrap.main(Bootstrap.Java:203)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.Java:32)
Caused by: Java.net.UnknownHostException: elasticsearchtest: Name or service not known
at Java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at Java.net.InetAddress$1.lookupAllHostAddr(InetAddress.Java:901)
at Java.net.InetAddress.getAddressesFromNameService(InetAddress.Java:1293)
at Java.net.InetAddress.getLocalHost(InetAddress.Java:1469)
... 62 more
[2014-09-18 08:56:16,937][INFO ][node ] [Acrobat] initialized
[2014-09-18 08:56:16,937][INFO ][node ] [Acrobat] starting ...
[2014-09-18 08:56:17,110][INFO ][transport ] [Acrobat] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/143.79.236.31:9300]}
[2014-09-18 08:56:17,126][INFO ][discovery ] [Acrobat] elastictest/QvSNFajjQ9SFjU7WOdjaLw
[2014-09-18 08:56:20,145][INFO ][cluster.service ] [Acrobat] new_master [Acrobat][QvSNFajjQ9SFjU7WOdjaLw][localhost][inet[/143.79.236.31:9300]], reason: zen-disco-join (elected_as_master)
[2014-09-18 08:56:20,212][INFO ][http ] [Acrobat] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/143.79.236.31:9200]}
[2014-09-18 08:56:20,214][INFO ][node ] [Acrobat] started
-elasticsearch.ymlのクラスター設定-
################################### Cluster ###################################
# Cluster name identifies your cluster for auto-discovery. If you're running
# multiple clusters on the same network, make sure you're using unique names.
#
cluster.name: elastictest
Elasticsearchの設定は$ES_HOME/config/elasticsearch.yml
にあります。そこで、cluster.name
設定がコメント化されている場合、ESがほぼすべてのクラスター名を取ることを意味します。したがって、コードでは、cluster.name
as "elastictest"
が問題になる可能性があります。これを試して:
Client client = new TransportClient()
.addTransportAddress(new InetSocketTransportAddress(
"143.79.236.xxx",
9300));
9300
ではなく9200
です$ES_HOME/config/elasticsearch.yml
で設定したcluster.nameと同じであることを確認してくださいclient.transport.sniff
をtrue
に設定しますが、ESクラスターのすべてのノードに接続できない場合もこの問題が発生します。 ES doc here 理由の説明。ノードのポートを確認する必要があります。headを使用して実行できます。これらのポートは同じではありません。例、
開くことができるWeb URLはlocalhost:9200
ですが、ノードのポートは9300
であるため、9200
をポートとして使用する場合、構成済みのノードはどれも使用できません。
同様の問題に直面し、ここに解決策があります
例:
Elasticsearch.ymlで以下のプロパティを追加します
cluster.name: production
node.name: node1
network.bind_Host: 10.0.1.22
network.Host: 0.0.0.0
transport.tcp.port: 9300
一括プッシュ用のJava Elastic APIに以下を追加します(コードスニペットのみ)。 IPアドレスには、エラスティック検索マシンのパブリックIPアドレスを追加します
Client client;
BulkRequestBuilder requestBuilder;
try {
client = TransportClient.builder().settings(Settings.builder().put("cluster.name", "production").put("node.name","node1")).build().addTransportAddress(
new InetSocketTransportAddress(InetAddress.getByName(""), 9300));
requestBuilder = (client).prepareBulk();
}
catch (Exception e) {
}
9200,9300のファイアウォールポートを開きます
NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{UfB9geJCR--spyD7ewmoXQ}{192.168.1.245}{192.168.1.245:9300}]]
私の場合、バージョンの違いでした。 elasticsearchクラスターのログを確認すると、表示されます。
Elasticsearchログ
[node1] exception caught on transport layer [NettyTcpChannel{localAddress=/192.168.1.245:9300, remoteAddress=/172.16.1.47:65130}], closing connection
Java.lang.IllegalStateException: Received message from unsupported version: [5.0.0] minimal compatible version is: [5.6.0]
Elasticsearchクライアントとトランスポートバージョン5.1.1を使用していました。そして、私のelasticsearchクラスターバージョンは6だったので、ライブラリバージョンを5.4.3に変更します。
上記のアドバイスが役に立たない場合は、ロギングフレームワーク構成(log4j、logback ...)のlog levelをINFOに変更します。次に、出力を再確認します。
ロガーは次のようなメッセージを隠している可能性があります。
INFO org.elasticsearch.client.transport.TransportClientNodesService - failed to get node info for...
Caused by: ElasticsearchSecurityException: missing authentication token for action...
(上記の例では、ElasticSearchに認証が必要なX-Packプラグインがありました)
完了のために、InetSocketTransportAddress
が提供する適切な静的メソッドを使用してトランスポートクライアントを作成するスニペットを以下に示します。
Client esClient = TransportClient.builder()
.settings(settings)
.build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("143.79.236.xxx"), 9300));
この問題が発生している他のユーザー向け。
Spring Boot <2バージョンの実行中に新しいElasticSearch(5.5以降)を実行している場合、このエラーが発生することがあります。
RESTクライアントは廃止されるため、Javaクライアントを使用することをお勧めします。
他の回避策は、Spring Boot 2にアップグレードすることです。これは互換性があるはずです。
詳細については、 https://discuss.elastic.co/t/spring-data-elasticsearch-cant-connect-with-elasticsearch-5-5-0/94235 を参照してください。
この問題を理解するために私は数日一緒に過ごします。私はその遅れを知っていますが、これは役に立つかもしれません:
以下の互換/安定バージョンを変更することにより、この問題を解決しました。
Spring boot: 2.1.1
Spring Data Elastic: 2.1.4
Elastic: 6.4.0 (default)
メイヴン:
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</dependency>
Elasticバージョンについて言及する必要はありません。デフォルトでは6.4.0です。ただし、特定のバージョンを追加する場合。以下のスニペットをプロパティタグ内で使用し、Spring BootとSpring Dataの互換バージョンを使用します(必要な場合)
<properties>
<elasticsearch.version>6.8.0</elasticsearch.version>
</properties>
また、ElasticConfigurationでRest High Levelクライアントを使用しました:
@Value("${elasticsearch.Host}")
public String Host;
@Value("${elasticsearch.port}")
public int port;
@Bean(destroyMethod = "close")
public RestHighLevelClient restClient1() {
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
RestClientBuilder builder = RestClient.builder(new HttpHost(Host, port));
RestHighLevelClient client = new RestHighLevelClient(builder);
return client;
}
}
重要な注意:Elasticは9300ポートを使用して、ノードと9200の間のHTTPクライアントとして通信します。アプリケーションのプロパティ:
elasticsearch.Host=10.40.43.111
elasticsearch.port=9200
spring.data.elasticsearch.cluster-nodes=10.40.43.111:9300 (customized Elastic server)
spring.data.elasticsearch.cluster-name=any-cluster-name (customized cluster name)
Postmanから、次を使用できます。 http://10.40.43.111:9200/ [indexname]/_search
ハッピーコーディング:)
ほとんどの回答は時代遅れに見えるので、ここで私のために働いた設定があります:
elasticsearch.yml:
cluster.name: production
node.name: node1
network.Host: 0.0.0.0
transport.tcp.port: 9300
cluster.initial_master_nodes: node1
セットアップ:
client = new PreBuiltTransportClient(Settings.builder().put("cluster.name", "production").build());
client.addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"), 9300));
PreBuiltTransportClientは推奨されないため、Elasticsearch-Version 7.3.0にはRestHighLevelClientを使用する必要があります。 https://artifacts.elastic.co/javadoc/org/elasticsearch/client/elasticsearch-rest-high-level-client/7.3。 0/index.html
Elasticsearch.ymlを確認してください。「transport.Host」プロパティは「127.0.0.1」または「localhost」ではなく「0.0.0.0」でなければなりません
これはES 1.7.5で私のために働いた:
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
public static void main(String[] args) throws IOException {
Settings settings = ImmutableSettings.settingsBuilder()
.put("client.transport.sniff",true)
.put("cluster.name","elasticcluster").build();
Client client = new TransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress("[ipaddress]",9300));
XContentBuilder builder = null;
try {
builder = jsonBuilder().startObject().field("user", "testdata").field("postdata",new Date()).field("message","testmessage")
.endObject();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(builder.string());
IndexResponse response = client.prepareIndex("Twitter","Tweet","1").setSource(builder).execute().actionGet();
client.close();
}
つまり、ES transportClientをインスタンス化してこの例外をスローすることはできません。この問題を引き起こす可能性がいくつかあります。
ES_HOME_DIR/config/elasticserach.yml
ファイルを開き、クラスター名の値を確認してくださいORこのコマンドを使用してください:curl -XGET 'http://localhost:9200/_nodes'
認証の問題:認証のためにtransportClientのコンテキストにヘッダーを設定します。
client.threadPool().getThreadContext()
.putHeader("Authorization", "Basic " + encodeBase64String(basicHeader.getBytes()));
それでもこの問題に直面している場合は、次のプロパティを追加します。
put("client.transport.ignore_cluster_name", true)
以下の基本的なコードは私のためにうまく機能しています:
Settings settings = Settings.builder()
.put("cluster.name", "my-application").put("client.transport.sniff", true).put("client.transport.ignore_cluster_name", false).build();
TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
Java Transport clientを使用している場合1.check 9300はアクセス可能/ openです。 2.ノードとクラスタ名を確認します。これは正しいはずです。ブラウザでip:portと入力して、ノードとクラスタ名を確認できます。 3.jarのバージョンとEsがインストールされているバージョンを確認します。