Elasticsearch: есть ли способ объявить для всех (возможно, динамических) подполей поля объекта как строку?

У меня есть doc_type с отображением, похожим на это очень упрощенное:

{
   "test":{
      "properties":{
         "name":{
            "type":"string"
         },
         "long_searchable_text":{
            "type":"string"
         },
         "clearances":{
            "type":"object"
         }
      }
   }
}

Полеclearances должен быть объектом с серией буквенно-цифровых идентификаторов для целей фильтрации. Типичный документ будет иметь этот формат:

{
    "name": "Lord Macbeth",
    "long_searchable_text": "Life's but a walking shadow, a poor player, that..."
    "clearances": {
        "glamis": "aa2862jsgd",
        "cawdor": "3463463551"
    }
}

Проблема в том, что иногда при индексации первым индексируется содержимое нового поля внутри поля объектаclearances будет полностью числовым, как в случае выше. Это заставляет Elasticsearch выводить тип этого поля какlong, Но это случайность. Поле может быть буквенно-цифровым в другом документе. Когда приходит последний документ, содержащий буквенно-цифровое значение в этом поле, я получаю исключение при разборе:

{"error":"MapperParsingException[failed to parse [clearances.cawdor]]; nested: NumberFormatException[For input string: \"af654hgss1\"]; ","status":400}% 

Я попытался решить это с помощью динамического шаблона, определенного следующим образом:

{
   "test":{
      "properties":{
         "name":{
            "type":"string"
         },
         "long_searchable_text":{
            "type":"string"
         },
         "clearances":{
            "type":"object"
         }
      }
   },
   "dynamic_templates":[
      {
         "source_template":{
            "match":"clearances.*",
            "mapping":{
               "type":"string",
               "index":"not_analyzed"
            }
         }
      }
   ]
}

Но случается так, что если первый индексированный документ имеетclearance.some_subfield значение, которое может быть проанализировано как целое число, будет выведено как целое число, и все последующие документы, имеющие буквенно-цифровые значения в этом подполе, не будут проиндексированы.

Я мог бы перечислить все текущие подполя в отображении, но их много, и я ожидаю, что их число будет расти в будущем (инициирование обновления отображения и необходимость полной переиндексации ...).

Есть ли способ заставить эту работу не прибегать к полной переиндексации при каждом добавлении нового подполя?

Ответы на вопрос(1)

Ваш ответ на вопрос