Elasticsearch: ¿hay una manera de declarar para todos los subcampos (posiblemente dinámicos) de un campo de objeto como una cadena?

Tengo un doc_type con una asignación similar a esta muy simplificada:

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

El campoclearances debe ser un objeto, con una serie de identificadores alfanuméricos para fines de filtrado. Un documento típico tendrá este formato:

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

El problema es que a veces durante la indexación, el primer contenido indexado de un nuevo campo dentro del campo de objetoclearances Será completamente numérico, como en el caso anterior. Esto hace que Elasticsearch deduzca el tipo de este campo comolong. Pero esto es un accidente. El campo puede ser alfanumérico en otro documento. Cuando llega un último documento que contiene un valor alfanumérico en este campo, obtengo una excepción de análisis:

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

Intenté resolver esto con una plantilla dinámica definida así:

{
   "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"
            }
         }
      }
   ]
}

Pero sigue sucediendo que si el primer documento indexado tiene unaclearance.some_subfield valor que se puede analizar como un entero, se inferiría como un entero y todos los documentos posteriores que tengan valores alfanuméricos en ese subcampo no se podrán indexar.

Podría enumerar todos los subcampos actuales en el mapeo, pero son muchos y espero que su número crezca en el futuro (lo que provocará una actualización del mapeo y la necesidad de una reindexación completa ...).

¿Hay alguna forma de hacer que esto funcione sin recurrir a esta reindexación completa cada vez que se agrega un nuevo subcampo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta