我在 pom.xml 中有一个带有 Spring Data Elasticsearch 插件的 Spring Boot 应用程序。我创建了一个我想索引的文档类:
@Document(indexName = "operations", type = "operation")
public class OperationDocument {
@Id
private Long id;
@Field(
type = FieldType.String,
index = FieldIndex.analyzed,
searchAnalyzer = "standard",
indexAnalyzer = "standard",
store = true
)
private String operationName;
@Field(
type = FieldType.Date,
index = FieldIndex.not_analyzed,
store = true,
format = DateFormat.custom, pattern = "dd.MM.yyyy hh:mm"
)
private Date dateUp;
@Field(
type = FieldType.String,
index = FieldIndex.not_analyzed,
store = false
)
private String someTransientData;
@Field(type = FieldType.Nested)
private List<Sector> sectors;
//Getter and setters
我还为这个类创建了一个存储库:
public interface OperationDocumentRepository
extends ElasticsearchRepository<OperationDocument, Long> {
}
我做了一个测试,使用存储库索引三个示例对象。它很长,所以我会发布它只需要。事实上,在 ES 服务器中创建的映射忽略了 @Field 注解设置的配置:
"mappings": {
"operation": {
"properties": {
"operationName": {
"type": "string"
},
"dateUp": {
"type": "long"
},
"someTransientData": {
"type": "string"
},
"sectors": {
"properties": {
"id": {
"type": "long"
},
"sectorName": {
"type": "string"
}
}
}
}
}
}
没有关于分析器的信息,“someTransientData”被存储和索引,并且 dateUp 被键入为 Long 而不是 Date。
直接从服务器请求的示例文档:
{
"_index": "operations",
"_type": "operation",
"_id": "AUyUk2cY3nXeOFxdOlQW",
"_version": 1,
"_score": 1,
"_source": {
"id": null,
"operationName": "Second Operation Name",
"dateUp": 1428421827091,
"someTransientData": "Do not index or store",
"sectors": [
{
"id": 2,
"sectorName": "Health Care"
},
{
"id": 3,
"sectorName": "Construction"
}
]
}
}
我还注意到,当我第二次运行应用程序时,在启动时出现此错误,仅在索引已经存在时打印:
错误 19452 --- [main] .dersAbstractElasticsearchRepository:加载弹性搜索节点失败:org.elasticsearch.index.mapper.MergeMappingException:合并失败并失败{[mapper [someTransientData] 具有不同的索引值,mapper [someTransientData] 具有不同的标记化值, mapper [someTransientData] 有不同的 index_analyzer, 对象映射 [sectors] 不能从非嵌套更改为嵌套, mapper [operationName] 有不同的存储值, mapper [operationName] 有不同的 index_analyzer, mapper [dateUp] 的类型不同,current_type [long],merged_type [date]]}
这是 Spring Data Elastic Search 的错误还是我做错了什么?
我尝试了 spring boot 提供的稳定版本和 spring-data-elasticsearch 的最后一个快照。我还尝试了插件提供的嵌入式 Elasticsearch 服务器和当前版本的外部服务器。我总是得到相同的结果。