Vấn đề: Làm thế nào để tạo ra một chỉ số từ một tập tin JSON sử dụngElasticsearch Java API addMapping() và setSettings() sử dụng
Các tệp json chứa một định nghĩa cho các chỉ số de_brochures
. Nó cũng định nghĩa một bộ phân tích de_analyzer
với các bộ lọc tùy chỉnh được sử dụng bởi chỉ mục tương ứng. Khi json hoạt động với curl và Sense I cho rằng tôi phải điều chỉnh cú pháp của nó để làm việc với API java.
Tôi không muốn sử dụng XContentFactory.jsonBuilder() khi json đến từ một tệp!
Tôi có file json sau để tạo lập bản đồ của tôi từ và để đặt thiết lập:
Sử dụng Sense với PUT/indexname nó tạo ra một chỉ số từ này.
{
"mappings": {
"de_brochures": {
"properties": {
"text": {
"type": "string",
"store": true,
"index_analyzer": "de_analyzer"
},
"classification": {
"type": "string",
"index": "not_analyzed"
},
"language": {
"type": "string",
"index": "not_analyzed"
}
}
}
"settings": {
"analysis": {
"filter": {
"de_stopwords": {
"type": "stop",
"stopwords": "_german_"
},
"de_stemmer": {
"type": "stemmer",
"name": "light_german"
}
},
"analyzer": {
"de_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"de_stopwords",
"de_stemmer"
]
}
}
}
}
}
Như ở trên đã không làm việc với addMapping() một mình tôi cố gắng chia nó thành hai tập tin riêng biệt (Tôi nhận ra rằng tôi đã phải loại bỏ các "mappings":
và "settings":
phần):
------ Mapping json ------
{
"de_brochures": {
"properties": {
"text": {
"type": "string",
"store": true,
"index_analyzer": "de_analyzer"
},
"classification": {
"type": "string",
"index": "not_analyzed"
},
"language": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
------- Settings json --------
{
"analysis": {
"filter": {
"de_stopwords": {
"type": "stop",
"stopwords": "_german_"
},
"de_stemmer": {
"type": "stemmer",
"name": "light_german"
}
},
"analyzer": {
"de_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"de_stopwords",
"de_stemmer"
]
}
}
}
}
này là mã java của tôi để tải và thêm/đặt json.
CreateIndexRequestBuilder createIndexRequestBuilder = client.admin().indices().prepareCreate(index);
// CREATE SETTINGS
String settings_json = new String(Files.readAllBytes(brochures_mapping_path));
createIndexRequestBuilder.setSettings(settings_json);
// CREATE MAPPING
String mapping_json = new String(Files.readAllBytes(brochures_mapping_path));
createIndexRequestBuilder.addMapping("de_brochures", mapping_json);
CreateIndexResponse indexResponse = createIndexRequestBuilder.execute().actionGet();
Không có khiếu nại thêm về cấu trúc tập tin bản đồ, nhưng nó bây giờ không thành công với các lỗi:
Caused by: org.elasticsearch.index.mapper.MapperParsingException: Analyzer [de_analyzer] not found for field [text]
Vui lòng không thêm giải pháp cho câu hỏi. Giải pháp không phải là câu hỏi. Giải pháp là câu trả lời. Stackoverflow khuyến khích tự trả lời câu hỏi của bạn khi bạn tìm thấy giải pháp. Nhưng hãy làm điều đó trong một câu trả lời. Chỉnh sửa câu hỏi để bao gồm giải pháp chỉ gây nhầm lẫn cho người đọc. Cảm ơn! – Vogel612