Я пытаюсь создать динамический шаблон для упругости, используя RestHighLevelClient.Закомментированный фрагмент кода в getMapping()
предназначен для статического отображения, которое работает.Однако при попытке создания динамического сопоставления у меня возникают проблемы.
Мое намерение состоит в том, чтобы рассматривать любой атрибут, который заканчивается длиной _id
, а любой атрибут, заканчивающийся _message
, как текст.
Может кто-нибудь указать, что я делаю неправильно?
":{"root_cause":[{"type":"class_cast_exception","reason":"class_cast_exception: java.util.LinkedHashMap cannot be cast to java.util.List"}],"type":"mapper_parsing_exception","reason":"Failed to parse mapping [_doc]: java.util.LinkedHashMap cannot be cast to java.util.List","caused_by":{"type":"class_cast_exception","reason":"class_cast_exception: java.util.LinkedHashMap cannot be cast to java.util.List"}},"status":400}
Мой фрагмент кода:
Основной метод:
CreateIndexRequest request = new CreateIndexRequest(indexName);
request.settings(Settings.builder()
.put("index.number_of_shards", 3)
.put("index.number_of_replicas", 2)
);
request.mapping("_doc", getMapping());
CreateIndexResponse createIndexResponse = esClient.indices().create(request, RequestOptions.DEFAULT);
Метод помощника:
private static XContentBuilder getMapping() throws IOException {
XContentBuilder mappingBuilder = XContentFactory.jsonBuilder()
.startObject()
.startObject("_doc")
.startObject("dynamic_templates")
.startObject("id")
.field("match", "*_id")
.field("match_mapping_type", "long")
.endObject()
.startObject("message")
.field("match", "*_message")
.field("match_mapping_type", "string")
.endObject()
.endObject()
.endObject()
.endObject();
/*XContentBuilder mappingBuilder = XContentFactory.jsonBuilder()
.startObject()
.startObject("_doc")
.startObject("properties")
.startObject("user")
.field("type", "text")
.field("index", true)
.endObject()
.startObject("message")
.field("type", "text")
.field("index", true)
.endObject()
.endObject()
.endObject()
.endObject();*/
return mappingBuilder;
}
Справочное руководство: https://www.elastic.co/guide/en/elasticsearch/guide/master/custom-dynamic-mapping.html