ElasticSearchディストリビューションをダウンロードして実行しました。
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"
}
そして、私は春のデータを使用してそれにアクセスしようとしています。 xml名前空間を使用してアプリケーションコンテキストに次の行を追加しました(Springデータのドキュメントによる)。
<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>
エンティティとリポジトリのコードは次のとおりです。
@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);
}
}
テストケースを実行して製品のインデックスを作成すると、一貫した警告メッセージが(2秒ごとに)表示されます。
[Neuronne] node null not part of the cluster Cluster [elasticsearch], ignoring...
[Neuronne] node null not part of the cluster Cluster [elasticsearch], ignoring...
そして、製品はインデックスに登録されていません(インデックスが作成されていなくても)
curl 'localhost:9200/_cat/indices?v'
health status index pri rep docs.count docs.deleted store.size pri.store.size
誰かがこれで私を助けることができますか?
同じエラーが発生し、検索エンジンからここに来た人は、TransportClient
がクラスター自体と同じクラスター名を使用していることを確認してください。
http:// localhost:92 にアクセスして、クラスター名を確認してください。デフォルト名はelasticsearch
です。 elasticsearch.yml
ファイルを使用してクラスター名をカスタマイズした場合は、構成ファイルが選択されていることを確認してください。
TransportClient
を作成するときにculster.name
を設定します。
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));
クラスター名チェックを無視する
client.transport.ignore_cluster_name
をtrue
に設定すると、クラスター名のチェックを無視できます。
それでもエラーが発生する場合は、アプリケーションをデバッグモードで起動し、デバッグ TransportClientNodesService
。
実験のために開発用elasticsearchサーバーの名前を変更しましたが、忘れてしまいました。
クライアントのエラーメッセージはそれほど役に立ちませんでした。TransportClientNodeServiceはリモート名と比較しますが、実際にはリモート名( "cluster-name")をログに書き込みません。
次のSpring構成では、名前チェックをバイパスすることができます。
私の解決策は次のいずれかでした。
私は両方に行きました、これは私の春の設定です、それが役立つことを願っています:
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