ElasticSearch Mapping Динамический Шаблон Java - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь создать динамический шаблон для упругости, используя 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...