17
votes

I just downloaded the elastic search distribution and ran it.

curl 'localhost:9200'

{
   "status" : 200,
   "name" : "cbs",
   "cluster_name" : "elasticsearch",
   "version" : {
   "number" : "1.4.1",
   "build_hash" : "89d3241d670db65f994242c8e8383b169779e2d4",
   "build_timestamp" : "2014-11-26T15:49:29Z",
   "build_snapshot" : false,
   "lucene_version" : "4.10.2"
    },
  "tagline" : "You Know, for Search"
}

And I am trying to access it using spring-data. Added the following lines in application-context (as per spring data documentation) with xml namespace:

<elasticsearch:repositories base-package="com.cbs" />
<elasticsearch:transport-client id="client" cluster-nodes="127.0.0.1:9300" cluster-name="elasticsearch" />
<bean name="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
    <constructor-arg name="client" ref="client" />
</bean>

Here is the entity and repository code:

@org.springframework.data.elasticsearch.annotations.Document(indexName = "product", type = "product", shards = 1, replicas = 0, indexStoreType = "memory", refreshInterval = "-1")
public class Product {
    @Id
    private String id;    
    private String name;
}


@Repository
public class ProductSearchDaoImpl implements IProductSearchDao {
@Autowired
private ElasticsearchOperations elasticsearchOperations;

@Override
public void index(Product product) {
    elasticsearchOperations.createIndex(Product.class);
    elasticsearchOperations.putMapping(Product.class);
    IndexQuery indexQuery = new IndexQueryBuilder().withId(product.getId()).withObject(product).build();
    elasticsearchOperations.index(indexQuery);
    elasticsearchOperations.refresh(Product.class, true);
}
}

Now when I run the test case to index the product, I am getting a consistent warning message (every 2 seconds or so) as

[Neuronne] node null not part of the cluster Cluster [elasticsearch], ignoring...
[Neuronne] node null not part of the cluster Cluster [elasticsearch], ignoring...

And the product is not getting indexed (even the index is not created)

curl 'localhost:9200/_cat/indices?v'
health status index    pri rep docs.count docs.deleted store.size pri.store.size 

Can anyone help me out with this?

2

2 Answers

39
votes

For those who met the same error and came here from search engines, make sure the TransportClient is using the same cluster name as the cluster itself.

  1. Verify cluster name.

Visit http://localhost:9200 to check the cluster name. The default name is elasticsearch. If you customised the cluster name using elasticsearch.yml file, make sure the config file is picked up.

  1. Set culster.name when creating TransportClient.

    Settings settings = ImmutableSettings.settingsBuilder()
            .put("cluster.name", clusterName)
            .put("client.transport.ignore_cluster_name", false)
            .put("node.client", true)
            .put("client.transport.sniff", true)
            .build();
    client = new TransportClient(settings).addTransportAddress(new  InetSocketTransportAddress(host, port)); 
    
  2. Ignore cluster name check

You can ignore the check of cluster name by setting client.transport.ignore_cluster_name to true.

  1. Debug if the error still exists

If the error still exists, launch your application in debug mode, and debug TransportClientNodesService.

4
votes

I had changed name on my dev elasticsearch server for the sake of experimenting and forgot about it.

The error message on the client were not that helpful, TransportClientNodeService makes a compare with the remote name but doesn't actually write the remote name ("cluster-name")in the log.

It is possible to bypass the name check with the following Spring configuration:

The resolution for me was to either:

  • Change name of the cluster.name in elasticsearch server.
  • Ignore cluster name of the client.

I went for both, this is my Spring config, hope it helps:

spring:
    ...
    data:
    elasticsearch:
        # Defaults to cluster-name 'elasticsearch'
        cluster-name:
        cluster-nodes: 127.0.0.1:9300
        properties:
            # https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/transport-client.html
            client.transport.ignore_cluster_name: true