Определение сопоставления не может быть вложено в тип [_doc], если для параметра include_type_name установлено значение true. - PullRequest
0 голосов
/ 08 июля 2020

Моя версия API - 6.3, и я пытаюсь создать index. Ошибка говорит: «Определение сопоставления не может быть вложено в тип [_doc], если для include_type_name установлено значение true». Вот мой код:

CreateIndexRequest indexRequest = new CreateIndexRequest("user");

request.source("{\n" +
        "    \"settings\" : {\n" +
        "        \"number_of_shards\" : 1,\n" +
        "        \"number_of_replicas\" : 0\n" +
        "    },\n" +
        "    \"mappings\" : {\n" +
        "        \"_doc\" : {\n" +
        "            \"properties\" : {\n" +
        "                \"message\" : { \"type\" : \"text\" }\n" +
        "            }\n" +
        "        }\n" +
        "    },\n" +
        "    \"aliases\" : {\n" +
        "        \"twitter_alias\" : {}\n" +
        "    }\n" +
        "}", XContentType.JSON);
CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(indexRequest);

После удаления «_do c», как показано ниже, ошибка говорит: «Не удалось проанализировать отображение [_doc]: для поля [свойства] не указан тип». Итак, что мне теперь делать?

 request.source("{\n" +
            "    \"settings\" : {\n" +
            "        \"number_of_shards\" : 1,\n" +
            "        \"number_of_replicas\" : 0\n" +
            "    },\n" +
            "    \"mappings\" : {\n" +
            "       
            "            \"properties\" : {\n" +
            "                \"message\" : { \"type\" : \"text\" }\n" +
            "            }\n" +
            "     
            "    },\n" +
            "    \"aliases\" : {\n" +
            "        \"twitter_alias\" : {}\n" +
            "    }\n" +
            "}", XContentType.JSON);

1 Ответ

0 голосов
/ 09 июля 2020

_doc было временным именем типа, которое было сохранено для обратной совместимости и для подготовки к его удалению, см. удаление типа для получения дополнительных сведений об этом.

Также см. расписание и как справиться с этим критическим изменением в вашей версии

  1. Индексы, созданные в 6.x, допускают только один тип для каждого индекса. Для типа можно использовать любое имя, но может быть только одно. Предпочтительное имя типа - _do c, чтобы API индекса имели тот же путь, что и в 7.0: PUT {index} / _ doc / {id} и POST {index} / _ do c

Также обратитесь к https://www.elastic.co/guide/en/elasticsearch/reference/7.x/removal-of-types.html#_migrating_multi_type_indices_to_single_type в этот раздел, где объясняется, как его использовать в 6.X.

Я бы посоветовал сначала попробовать создать индекс с помощью REST API и посмотреть с комбинацией include_type_name и index.mapping.single_type он работает или нет и соответственно добавьте его в свой код.

...