问题
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?
回答1:
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.
- 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.
Set
culster.namewhen creatingTransportClient.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));Ignore cluster name check
You can ignore the check of cluster name by setting client.transport.ignore_cluster_name to true.
- Debug if the error still exists
If the error still exists, launch your application in debug mode, and debug TransportClientNodesService.
回答2:
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
来源:https://stackoverflow.com/questions/27170739/elasticsearch-indexing-not-working-and-error-message-node-null-not-part-of-the