Java Spring boot elasticsearch@字段名不起作用
我正在使用:Java Spring boot elasticsearch@字段名不起作用,java,spring,
spring-data-elasticsearch,Java,Spring,
spring Data Elasticsearch,我正在使用: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.6.RELEASE</version> <relativePath/> </parent> ... <
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/>
</parent>
...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-releasetrain</artifactId>
<version>Moore-SR6</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
ES文档被编入索引,但使用字段domainName,我希望是在@field注释中指定的域名
我也尝试过@JsonPropertydomain_name,在这种情况下该字段被忽略
这是一个已知的问题吗
多谢各位
编辑复制的pom:
一点技术背景:该版本中的SpringDataElasticSearch在内部使用接口EntityMapper的实现将实体转换为Elasticsearch和back所需的JSON格式 Spring Boot自动配置实例化了一个ElasticsearchRestTemplate,该模板在内部使用DefaultEntityMapper,它只是Jackson的一个薄包装。这个实现会导致很多问题,其中之一就是属性的自定义命名 因此,从3.2版开始,有一个替代实现可用,ElasticsearchEntityMapper,但必须显式配置。您需要向应用程序中添加如下配置类:
@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {
@Override
@Primary
@Bean
public RestHighLevelClient elasticsearchClient() {
ClientConfiguration clientConfiguration = ClientConfiguration.builder() //
.connectedTo("localhost:9200") //
.build();
return RestClients.create(clientConfiguration).rest();
}
@Bean
@Override
public EntityMapper entityMapper() {
ElasticsearchEntityMapper entityMapper = new ElasticsearchEntityMapper(
elasticsearchMappingContext(), new DefaultConversionService()
);
entityMapper.setConversions(elasticsearchCustomConversions());
return entityMapper;
}
}
请注意,此处提供的Elasticsearch主机没有http://前缀,您可能希望向配置中添加其他属性,并使用$Value属性将其自动关联到此配置类中
注:
从4.0的下一个主要版本开始,旧的基于Jackson的EntityMapper将不再可用,EntityMapper的这种自定义配置将不再需要 如何配置与Elasticsearch的连接?您有Spring Data Elasticsearch的自定义配置吗?索引是已经在Elasticsearch中创建的还是自动创建的?我在索引之前尝试了自动创建和自己创建。elasticsearch的配置只是:elasticsearch:rest:uris:read timeout:10扫描您是否可以添加应用程序配置的相关部分?这是我所有的配置:````spring:jpa:hibernate:ddl auto:none数据源:驱动程序类名:com.mysql.cj.jdbc.driver url:jdbc:mysql://${mysql\u HOST:localhost}:3306/数据库用户名:用户名密码:密码elasticsearch:rest:uris:read timeout:10s用户名:密码:管理:端点:运行状况:显示详细信息:始终```这就是我配置的全部内容。文档会被索引,但java类属性名称不是@field中定义的名称。请在您的问题中添加完整的maven依赖项,而不是作为注释,否则无法重现。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/>
</parent>
<groupId>com.test</groupId>
<artifactId>spring-es-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-es-test</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<elasticsearch.version>6.8.7</elasticsearch.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-releasetrain</artifactId>
<version>Moore-SR6</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
<version>3.1.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {
@Override
@Primary
@Bean
public RestHighLevelClient elasticsearchClient() {
ClientConfiguration clientConfiguration = ClientConfiguration.builder() //
.connectedTo("localhost:9200") //
.build();
return RestClients.create(clientConfiguration).rest();
}
@Bean
@Override
public EntityMapper entityMapper() {
ElasticsearchEntityMapper entityMapper = new ElasticsearchEntityMapper(
elasticsearchMappingContext(), new DefaultConversionService()
);
entityMapper.setConversions(elasticsearchCustomConversions());
return entityMapper;
}
}