You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot集成Elasticsearch 3.x配置求助及现有配置代码

Spring Boot 集成 Elasticsearch 3.x 配置指南

Hey,我来帮你搞定Spring Boot配置Elasticsearch 3.x的问题!首先得明确,Elasticsearch 3.x属于比较早期的版本,对应的Spring Data Elasticsearch版本得匹配好,建议用Spring Boot 1.5.x系列(它适配的Spring Data Elasticsearch 2.1.x对Elasticsearch 2.x-5.x支持都不错)。下面给你补全并修正你写了一半的配置代码,再给你完整的配置步骤:

1. 先搞定依赖(Maven示例)

在pom.xml里引入对应依赖,版本一定要对应上,不然容易出兼容性问题:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.22.RELEASE</version>
    <relativePath/>
</parent>

<dependencies>
    <!-- Spring Boot Web 基础依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Spring Data Elasticsearch 核心 -->
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-elasticsearch</artifactId>
    </dependency>
    <!-- Elasticsearch 3.x 核心包 -->
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>3.0.0</version>
    </dependency>
</dependencies>

2. 完整的配置类代码

你的配置类写了一半就断了,下面给你补全两种常见配置模式:

模式一:嵌入式节点(适合开发测试)

这种模式会在应用内启动一个Elasticsearch节点,不用单独部署ES服务,方便开发调试:

import org.elasticsearch.node.Node;
import org.elasticsearch.node.NodeBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;

import java.io.File;
import java.io.IOException;

@Configuration
// 你的JPA仓库扫描路径,按实际包名调整
@EnableJpaRepositories(basePackages = "com.demo.elastic.jparepository")
// Elasticsearch仓库扫描路径
@EnableElasticsearchRepositories(basePackages = "com.demo.elastic.repository")
public class ElasticConfiguration {

    @Bean
    public NodeBuilder nodeBuilder() {
        return NodeBuilder.nodeBuilder();
    }

    @Bean
    public ElasticsearchOperations elasticsearchTemplate() throws IOException {
        // 创建临时目录存储ES数据,生产环境记得改成固定路径
        File tmpDir = File.createTempFile("elastic", "tmp");
        tmpDir.delete();
        tmpDir.mkdirs();

        // 构建嵌入式节点
        Node node = nodeBuilder()
                .local(true)
                .data(true)
                .settings(settingsBuilder()
                        .put("path.home", tmpDir.getAbsolutePath())
                        .put("path.data", tmpDir.getAbsolutePath() + "/data")
                        .put("path.logs", tmpDir.getAbsolutePath() + "/logs")
                        .put("http.enabled", true))
                .node();

        return new ElasticsearchTemplate(node.client());
    }
}

模式二:连接远程ES集群(生产环境推荐)

如果你的ES是单独部署的集群,用这种模式更稳定:

import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;

import java.net.InetAddress;
import java.net.UnknownHostException;

@Configuration
@EnableJpaRepositories(basePackages = "com.demo.elastic.jparepository")
@EnableElasticsearchRepositories(basePackages = "com.demo.elastic.repository")
public class ElasticConfiguration {

    @Bean
    public ElasticsearchOperations elasticsearchTemplate() throws UnknownHostException {
        // 填写你的ES集群名称,和集群配置保持一致
        Settings settings = Settings.settingsBuilder()
                .put("cluster.name", "your-cluster-name")
                .build();

        // 创建客户端连接远程节点,IP和端口按实际情况调整
        Client client = TransportClient.builder()
                .settings(settings)
                .build()
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));

        return new ElasticsearchTemplate(client);
    }
}

3. 几个关键注意点

  • 版本匹配红线:一定要保证Spring Data Elasticsearch和ES服务器版本兼容,ES 3.0.0对应Spring Data Elasticsearch 2.1.x是没问题的,别乱跨版本搭配!
  • 端口别搞混:ES的TCP通信端口是9300,HTTP端口是9200,用TransportClient连接时必须用9300。
  • 生产环境建议:嵌入式节点只适合开发测试,生产环境必须用远程集群模式,还要给ES数据目录配置合适的读写权限。

内容的提问来源于stack exchange,提问作者Rahul Raj Sonu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:39:56