Преобразование «длинного» типа данных в строку / текст в Elasticsearch

#elasticsearch #kibana #elastic-stack #elasticsearch-7

#elasticsearch #kibana #эластичный стек #elasticsearch-7

Вопрос:

Я хочу преобразовать тип данных поля из long в text . У меня есть поле с отображением

 "shopId": {
  "type": "long"
}
 

Сначала я проверил некоторые документы, такие как:

 {"shopId": "25"},{"shopId": "26"},{"shopId": "27"}
 

Затем я добавил еще одно поле с типом text :

 {
  "anotherShopId":{
    "type":"text",
    "fields":{
      "keyword":{
        "type":"keyword",
        "ignore_above":256
      }
    }
  }
}
 

Итак, теперь мое отображение / схема выглядят следующим образом:

 {
  "sanchitindex":{
    "aliases":{
      
    },
    "mappings":{
      "properties":{
        "anotherShopId":{
          "type":"text",
          "fields":{
            "keyword":{
              "type":"keyword",
              "ignore_above":256
            }
          }
        },
        "shopId":{
          "type":"long"
        }
      }
    },
    "settings":{
      "index":{
        "creation_date":"1612778764965",
        "number_of_shards":"1",
        "number_of_replicas":"1",
        "uuid":"S0iqrEIKS96XMnRgXkGsiQ",
        "version":{
          "created":"7030199"
        },
        "provided_name":"sanchitindex"
      }
    }
  }
}
 

Я пытаюсь перенести shopId значения на anotherShopId использование API переиндексации.

 POST http://localhost:9200/sanchitindex/_reindex

    {
      "source": {
        "index": "shopId"
      },
      "dest": {
        "index": "anotherShopId"
      },
      "script": {
        "inline": "ctx._source.shopId = String.valueOf(ctx._source.shopId)"
      }
    }
 

Но я не смог этого сделать, так как получаю следующий ответ:

 {
    "error": {
        "root_cause": [
            {
                "type": "illegal_argument_exception",
                "reason": "Rejecting mapping update to [sanchitindex] as the final mapping would have more than 1 type: [_doc, _reindex]"
            }
        ],
        "type": "illegal_argument_exception",
        "reason": "Rejecting mapping update to [sanchitindex] as the final mapping would have more than 1 type: [_doc, _reindex]"
    },
    "status": 400
}
 

Версия: 7.3.1

Есть ли какой-либо другой способ переноса данных из long в text ?

Ответ №1:

Убедитесь, что вы ориентируетесь POST http://localhost:9200/_reindex (без имени индекса) вместо POST .../sanchitindex/_reindex .

Выше была попытка добавить новый _type с именем «_reindex», который противоречит требованию одного типа сопоставления для каждого индекса, поэтому сообщение об ошибке гласит, что

окончательное сопоставление будет иметь более 1 типа