在Spring启动应用程序中连接到现有ElasticSearch实例时出现问题

时间:2016-03-09 10:51:15

标签: java spring elasticsearch spring-boot

我有一个本地运行的elasticsearch实例。 我有一个春季启动应用程序。 在我的应用程序中,我有一个服务ServiceX,它包含一个扩展ElasticsearchRepository的elasticsearch存储库。 所以 服务X包含 YRepository扩展了ElasticsearchRepository

我有一个在本地运行的弹性搜索实例。

我的弹性搜索设置是

ELASTICSEARCH (ElasticsearchProperties)
spring.data.elasticsearch.properties.http.enabled=true
spring.data.elasticsearch.properties.host = localhost
spring.data.elasticsearch.properties.port = 9300

启动应用程序时,会创建弹性搜索模板。 使用的客户端是NodeClient。 NodeClient的设置是

"http.enabled" -> "true"
"port" -> "9300"
"host" -> "localhost"
"cluster.name" -> "elasticsearch"
"node.local" -> "true"
"name" -> "Human Robot"
"path.logs" -> "C:/dev/git/xxx/logs"

elasticsearch的名称(在本例中为Human Robot)与运行的本地elasticsearch实例(在本例中为Nikki)不匹配。

它看起来像 1.创建一个新的logstash实例 2.创建一个嵌入式logstash实例。

我搜索了很多信息,但找不到任何文档可以提供帮助。

有人可以建议使用什么设置吗? 感谢。

2 个答案:

答案 0 :(得分:1)

我相信你不想使用NodeClient而是使用TransportClient,除非你希望你的应用程序成为集群的一部分

我相信你有以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artificatId>spring-boot-starter-data-elasticsearch</artificatId>
</dependency>

然后你需要创建一些配置类,如下所示:

@Configuration
@PropertySource(value = "classpath:config/elasticsearch.properties")
public class ElasticsearchConfiguration {

    @Resource
    private Environment environment;

    @Bean
    public Client client() {
        TransportClient client = new TransportClient();
        TransportAddress address = new InetSocketTransportAddress(
                environment.getProperty("elasticsearch.host"), 
                Integer.parseInt(environment.getProperty("elasticsearch.port"))
        );
        client.addTransportAddress(address);        
        return client;
    }

    @Bean
    public ElasticsearchOperations elasticsearchTemplate() {
        return new ElasticsearchTemplate(client());
    }
}

同时检查Spring Boot指南的ElasticSearch section,特别是关于spring.data.elasticsearch.cluster-nodes的部分,如果你把多个逗号分隔的主机端口列表,它将生成一个TransportClient而不是你的选择

尝试一下,希望有所帮助

答案 1 :(得分:0)

感谢。您是否相信我在看到您的帖子之前就开始尝试使用配置文件了?我添加了一个配置类

@Configuration
public class ElasticSearchConfig {

    @Bean
    public Client client() {
      TransportClient client = new TransportClient();
      TransportAddress address = new InetSocketTransportAddress(
              "localhost",9300);
      client.addTransportAddress(address);
      return client;
  }
}

现在客户端被注入弹性搜索模板(所以不需要elasticsearchtemplate bean)。

当我尝试连接时出现错误,但结果是由于弹性搜索2.2.0,已经尝试使用elasticsearch 1.7.3并且现在已经解决了下一个问题!