问题
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.name
when 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