17

エラスティック検索ディストリビューションをダウンロードして実行しました。

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 

誰でもこれで私を助けることができますか?

4

2 に答える 2

39

同じエラーに遭遇し、検索エンジンからここに来た場合TransportClientは、 がクラスター自体と同じクラスター名を使用していることを確認してください。

  1. クラスター名を確認します。

http://localhost:9200にアクセスして、クラスター名を確認します。デフォルト名は ですelasticsearch。ファイルを使用してクラスター名をカスタマイズした場合はelasticsearch.yml、構成ファイルが選択されていることを確認してください。

  1. culster.name作成時に設定し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. クラスタ名チェックを無視

client.transport.ignore_cluster_nameに設定すると、クラスタ名のチェックを無視できますtrue

  1. エラーがまだ存在する場合はデバッグします

それでもエラーが発生する場合は、アプリケーションをデバッグ モードで起動し、 debug TransportClientNodesService.

于 2015-06-30T01:53:14.567 に答える
4

実験のために開発用elasticsearchサーバーの名前を変更しましたが、それを忘れていました。

クライアントのエラー メッセージはあまり役に立ちませんでした。TransportClientNodeService はリモート名と比較しますが、実際にはリモート名 (「クラスター名」) をログに書き込みません。

次の Spring 構成で名前チェックをバイパスすることができます。

私にとっての解決策は、次のいずれかでした。

  • elasticsearch サーバーの 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
于 2016-01-10T10:32:01.250 に答える