None of the configured nodes are available

  1. 今天写了一段ES的测试代码,如下:

    package elasticSearch;

    import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.List; import java.util.Map;

    import org.elasticsearch.action.index.IndexRequestBuilder; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.Client; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits;

    import entity.Person; import util.JsonUtils;

    public class ESTest {

    1private Client client; 2 3public ESTest() { 4 this("localhost"); 5} 6 7public ESTest(String ip) { 8 Settings settings = Settings.settingsBuilder().put("cluster.name", "huiTest") 9 .build(); 10 client = TransportClient.builder().settings(settings).build(); 11 client = ((TransportClient) client).addTransportAddress( 12 new InetSocketTransportAddress(new InetSocketAddress(ip, 9300))); 13 14} 15 16public IndexResponse createIndex(String indexName, String type, 17 List<String> jsonArray) { 18 19 IndexRequestBuilder builder = client.prepareIndex(indexName, type); 20 for (String jsonTemp : jsonArray) { 21 System.out.println(jsonTemp); 22 builder = builder.setSource(jsonTemp); 23 } 24 IndexResponse response = builder.execute().actionGet(); 25 return response; 26 27} 28 29public List<Person> search(QueryBuilder queryBuilder, String indexName, String type) { 30 List<Person> persons = new ArrayList<>(); 31 32 SearchResponse sResponse = client.prepareSearch(indexName).setTypes(type) 33 .setQuery(queryBuilder).execute().actionGet(); 34 SearchHits hits = sResponse.getHits(); 35 36 System.out.println(hits.getTotalHits()); 37 Double salary = 0.0; 38 SearchHit[] hitArray = hits.hits(); 39 for (SearchHit hit : hitArray) { 40 Map<String, Object> map = hit.getSource(); 41 42 Integer age = (Integer) map.get("age"); 43 String name = (String) map.get("name"); 44 Object salaryO = map.get("salary"); 45 if (salaryO instanceof Integer) { 46 salary = (Integer) salaryO * 1.0; 47 } else { 48 salary = (Double) salaryO; 49 } 50 Person p = new Person(name, age, salary); 51 52 persons.add(p); 53 } 54 return persons; 55} 56 57public static void main(String[] args) { 58 ESTest esTest = new ESTest(); 59 60 List<Person> persons = JsonUtils.getData(10); 61 List<String> jsonArray = JsonUtils.covertList2String(persons); 62 63 String indexName = "liuhui'sindex";// 要小写 64 String type = "liuhui'sType"; 65  esTest.createIndex(indexName, type, jsonArray); 66 67 // QueryBuilder builder = QueryBuilders.matchAllQuery(); 68 // QueryBuilder builder = QueryBuilders.termQuery("name", "hui10"); 69 QueryBuilder builder = QueryBuilders.termQuery("age", "20"); 70 71 List<Person> list = esTest.search(builder, indexName, type); 72 System.out.println(list); 73 74}

    }

运行时报错如下:

1Exception in thread "main" NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{127.0.0.1}{localhost/127.0.0.1:9300}]] 2     at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:290) 3     at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:207) 4     at org.elasticsearch.client.transport.support.TransportProxyClient.execute(TransportProxyClient.java:55) 5     at org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:288) 6     at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:359) 7     at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:86) 8     at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:56) 9     at elasticSearch.ESTest.search( ESTest.java:60) 10     at elasticSearch.ESTest.main( ESTest.java:99)

造成这一异常的原因,仅我所知的,有以下几个:

  1. 运行该客户端时 elasticsearch.bat未启动;

  2. cluster.name:huiTest未在ES的安装目录config下的elasticsearch.yml中配置,即如果代码里使用了put("cluster.name","huiTest"),则一定要在elasticsearch.yml中添加一行配置:cluster.name:huiTest,因为cluster.name默认是elasticsearch。当然也可以不使用put("cluster.name","huiTest"),或者使用put("cluster.name","elasticsearch");这里要注意如果修改了elasticsearch.yml文件,一定要重启elasticsearch.bat;

  3. 客户端端口不是用的9300,而是9200.9200是为http协议准备的,9300才是客户端使用的;

    以上3条逐个排查,多半问题就解决了;

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java 帮助类

package com.quincy.util;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.

java多线程读取、操作List集合

import java.util.ArrayList;import java.util.List;import org.apache.commons.lang3.ArrayUtils;public class Test_4 {/ 多线程处理list

POI导入大excel文件

package me.shanzhi.test;import java.io.InputStream;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import org.apac

Java公钥私钥签名工具包

package com.locator.encryption;import java.io.ByteArrayOutputStream;import java.security.Key;import java.security.KeyFactory;import java.security.KeyPa

Excel导出工具类.

 Excel导出工具类.POIimport java.io.OutputStream;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.ArrayList;import java.uti

None of the configured nodes are available - HelloWorld