Нужно ли принудительно переиндексировать все старые документы при изменении сопоставления какого-либо поля NON-INDEXED? - PullRequest
2 голосов
/ 10 июля 2020

У меня есть сопоставление ниже в моем elasti c search

"properties": {
  "id": {
    "type": "string",
    "index": "not_analyzed"
  },
  "tag": {
    "type": "long"
  },
  "level": {
    "type": "integer"
  },
  "fieldIn": {
    "type": "long",
    "index": "no"
  },
  "fieldOut": {
    "type": "long",
    "index": "no"
  },
  
}

Мне нужно изменить тип данных fieldIn / fieldOut на String. Поскольку это НЕ ИНДЕКСИРОВАННЫЙ, мне нужно принудительно переиндексировать все старые документы

1 Ответ

1 голос
/ 11 июля 2020

Вы меняете тип данных существующего поля, что является критическим изменением, и Elasti c не позволит это сделать . Следуйте примеру, который я создал, чтобы показать вам MergeMappingException, которое ES выдаст в вашем случае.

Создать сопоставление индекса с длинным полем:

{
  "mappings": {
    "mytype": {
      "properties": {
        "fieldOut": {
          "type": "long",
          "index": "no"
        }
      }
    }
  }
}

Индекс do c, содержащий длинные значения

{
 "fieldOut" :14897594242
}

{
 "fieldOut" :112343434534
}

** Попробуйте изменить fieldOut на строку, используя put aka update mapping API **

{
  "mytype": {
    "properties": {
      "fieldOut": {
        "type": "string", // note changed to string type
        "index": "no"
      }
    }
  }
}

Это приведет к исключению ниже:

{"error": "MergeMappingException [Сбой слияния с ошибками {[mapper [fieldOut] другого типа, current_type [long], merged_type [string]]}]", "status": 400 }

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