Tôi có một ứng dụng Khởi động mùa xuân với plugin Spring Data Elasticsearch trong tệp pom.xml. Tôi tạo ra một lớp tài liệu mà tôi muốn chỉ số:Dữ liệu mùa xuân Chú thích @Field của Elasticsearch không hoạt động
@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
Tôi cũng tạo ra một kho lưu trữ cho lớp này:
public interface OperationDocumentRepository
extends ElasticsearchRepository<OperationDocument, Long> {
}
tôi đã thực hiện một bài kiểm tra đó chỉ số ba đối tượng mẫu bằng cách sử dụng kho. Nó khá dài nên tôi chỉ cần đăng nó là cần thiết. Thực tế là các bản đồ được tạo ra trong máy chủ ES bỏ qua cấu hình được thiết lập bởi các chú thích @Field:
"mappings": {
"operation": {
"properties": {
"operationName": {
"type": "string"
},
"dateUp": {
"type": "long"
},
"someTransientData": {
"type": "string"
},
"sectors": {
"properties": {
"id": {
"type": "long"
},
"sectorName": {
"type": "string"
}
}
}
}
}
}
Không có thông tin về phân tích, "someTransientData" được lưu trữ và lập chỉ mục, và dateUp được gõ như dài thay vì ngày .
Một tài liệu mẫu yêu cầu trực tiếp từ máy chủ:
{
"_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"
}
]
}
}
tôi cũng lưu ý rằng khi tôi chạy ứng dụng lần thứ hai, vào thời điểm khởi động tôi nhận được lỗi này, chỉ in khi chỉ số đã tồn tại:
lỖI 19452 --- [chính] .dersAbstractElasticsearchRepository: không thể tải elasticsearch nút: org.elasticsearch.index.mapper.MergeMappingException: Merge thất bại với thất bại {[mapper [someTransientData] có giá trị chỉ số khác nhau, mapper [someTransientData] có nhiều thứ khác nhau enize values, mapper [someTransientData] có index_analyzer khác nhau, ánh xạ đối tượng [sector] không thể thay đổi từ non-nested thành lồng nhau, mapper [operationName] có giá trị lưu trữ khác nhau, mapper [operationName] có index_analyzer khác nhau, mapper [dateUp] của loại khác, current_type [long], merged_type [date]]}
Đây có phải là lỗi của dữ liệu mùa xuân Elastic Search hoặc tôi đang làm gì đó sai?
Tôi đã thử phiên bản ổn định được cung cấp bởi khởi động mùa xuân và ảnh chụp nhanh cuối cùng của spring-data-elasticsearch. Tôi cũng đã thử máy chủ Elasticsearch được nhúng do plugin cung cấp và một phiên bản bên ngoài của phiên bản hiện tại. Tôi luôn nhận được kết quả tương tự.
Tôi đã thử nghiệm ví dụ của bạn và nó làm việc. Sau đó, tôi đã tạo một dự án Khởi động mùa xuân mới và nó cũng đã hoạt động. Bây giờ tôi đang cố gắng tìm ra những gì phá vỡ ứng dụng đầu tiên của tôi. Tôi sẽ cập nhật bài viết đầu tiên nếu tôi tìm thấy nó. Cảm ơn bạn! – WinterN
Tôi cuối cùng có thể nhân rộng và giải quyết vấn đề. Tôi đã đăng lý do và giải pháp trong câu trả lời khác. – WinterN