I have write a code fot creating a index on elastic search,when i run the code i fot No node available exception why this error is coming i did't understand,can you guys help me


(kiran) #1

This is code

import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;

import java.io.IOException;

import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequestBuilder;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse;
import org.elasticsearch.action.get.GetRequestBuilder;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequestBuilder;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;

public class MyTestClass {

private static final String ID_NOT_FOUND = "<ID NOT FOUND>";

private static Client getClient() {
    final ImmutableSettings.Builder settings = ImmutableSettings.settingsBuilder().put("cluster.name", "sumit");
    TransportClient transportClient = new TransportClient(settings);
    transportClient = transportClient.addTransportAddress(new InetSocketTransportAddress("localhost", 9200));
    return transportClient;
}

public static void main(final String[] args) throws IOException, InterruptedException {

    final Client client = getClient();
    // Create Index and set settings and mappings
    final String indexName = "test";
    final String documentType = "tweet";
    final String documentId = "1";
    final String fieldName = "foo";
    final String value = "bar";
    XContentBuilder builder;
   

    final IndicesExistsResponse res = client.admin().indices().prepareExists(indexName).execute().actionGet();
    if (res.isExists()) {
        final DeleteIndexRequestBuilder delIdx = client.admin().indices().prepareDelete(indexName);
        delIdx.execute().actionGet();
    }

    final CreateIndexRequestBuilder createIndexRequestBuilder = client.admin().indices().prepareCreate(indexName);

    // MAPPING GOES HERE

    final XContentBuilder mappingBuilder = jsonBuilder().startObject().startObject(documentType)
            .startObject("_ttl").field("enabled", "true").field("default", "1s").endObject().endObject()
            .endObject();
    System.out.println(mappingBuilder.string());
    createIndexRequestBuilder.addMapping(documentType, mappingBuilder);

    // MAPPING DONE
    createIndexRequestBuilder.execute().actionGet();

    // Add documents
    final IndexRequestBuilder indexRequestBuilder = client.prepareIndex(indexName, documentType, documentId);
    // build json object
    final XContentBuilder contentBuilder = jsonBuilder().startObject().prettyPrint();
    contentBuilder.field(fieldName, value);

    indexRequestBuilder.setSource(contentBuilder);
    indexRequestBuilder.execute().actionGet();

    // Get document
  /*  System.out.println(getValue(client, indexName, documentType, documentId, fieldName));

    int idx = 0;
    while (true) {
        Thread.sleep(10000L);
        idx++;
        System.out.println(idx * 10 + " seconds passed");
        final String name = getValue(client, indexName, documentType, documentId, fieldName);
        if (ID_NOT_FOUND.equals(name)) {
            break;
        } else {
            // Try again
            System.out.println(name);
        }
    }
    System.out.println("Document was garbage collected");
}

This is error
Exception in thread "main" org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []
at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:278)
at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:197)
at org.elasticsearch.client.transport.support.InternalTransportIndicesAdminClient.execute(InternalTransportIndicesAdminClient.java:86)
at org.elasticsearch.client.support.AbstractIndicesAdminClient.exists(AbstractIndicesAdminClient.java:170)
at org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequestBuilder.doExecute(IndicesExistsRequestBuilder.java:53)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:91)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:65)
at MyTestClass.main(MyTestClass.java:40)


(Magnus Bäck) #2
transportClient = transportClient.addTransportAddress(new InetSocketTransportAddress("localhost", 9200));

It's the HTTP protocol that uses port 9200. The transport protocol uses 9300. See https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/transport-client.html.


(kiran) #3

But I was change my port no It is 9200.


(Magnus Bäck) #4

I don't understand what you're saying. Use port 9300, not 9200.


(kiran) #5

I mean When i change the port the same error would throw.


(system) #6