Cómo aumentar el conteo de fragmentos primarios en Elasticsearch
Aprende cómo aumentar la cantidad de shards primarios en Elasticsearch usando las API split y reindex para un escalado óptimo de shards.
No es posible aumentar el número de fragmentos primarios de un índice existente, lo que significa que hay que recrear un índice si quieres aumentar el número de fragmentos primarios. En estas situaciones se emplean generalmente dos métodos: la API _reindex y la API _split.
La API _split suele ser un método más rápido que la API _reindex. La indexación debe detener antes de ambas operaciones, de lo contrario, el source_index y el target_index el recuentos de documentos variarán.

Método 1 – usando la API dividida
La API dividida se emplea para crear un nuevo índice con el número deseado de fragmentos primarios copiando los ajustes y mapeando un índice existente. El número deseado de fragmentos primarios puede establecer durante la creación. Se deben comprobar las siguientes configuraciones antes de implementar la API de división:
El índice de origen debe ser de solo lectura. Esto significa que el proceso de indexación debe detener.
El número de fragmentos primarios en el índice objetivo debe ser un múltiplo del número de fragmentos primarios en el índice fuente. Por ejemplo, si el índice fuente tiene 5 fragmentos primarios, los fragmentos primarios del índice objetivo pueden establecer en 10, 15, 20, y así sucesivamente.
Nota: Si solo es necesario cambiar el número principal del fragmento, se prefiere la API dividida porque es mucho más rápida que la API de Reindex.
Implementación de la API de división
Crea un índice de prueba:
POST test_split_source/_doc
{
"test": "test"
}El índice fuente debe ser de solo lectura para poder dividir:
PUT test_split_source/_settings
{
"index.blocks.write": true
}Los ajustes y mapeos se copiarán automáticamente desde el índice fuente:
POST /test_split_source/_split/test_split_target
{
"settings": {
"index.number_of_shards": 3
}
}Puedes consultar el progreso con:
GET _cat/recovery/test_split_target?v&h=index,shard,time,stage,files_percent,files_totalComo los ajustes y mapeos se copian de los índices fuente, el índice destino es de solo lectura. Activemos la operación de escritura para el índice objetivo:
PUT test_split_target/_settings
{
"index.blocks.write": null
}Consulta el índice de origen y destino docs.count antes de eliminar el índice original:
GET _cat/indices/test_split*?v&h=index,pri,rep,docs.countEl nombre del índice y el nombre del alias no pueden ser iguales. Necesitas eliminar el índice fuente y agregar el nombre del índice fuente como alias al índice objetivo:
DELETE test_split_source
PUT /test_split_target/_alias/test_split_sourceLuego de agregar el alias test_split_source al índice de test_split_target , deberías probarlo con:
GET test_split_source
POST test_split_source/_doc
{
"test": "test"
}Método 2 – usando la API de reindex
Al crear un nuevo índice con la API Reindex, se puede obtener cualquier número de conteos de fragmentos primarios. Tras crear un nuevo índice con el número previsto de fragmentos primarios, todos los datos del índice fuente pueden reindexar a este nuevo índice.
Además de las funciones de API dividida, los datos pueden manipular usando el ingest_pipeline en el AP de reindexación. Con la tubería de ingest, solo los campos especificados que encajen con el filtro se indexarán en el índice objetivo usando la consulta. El contenido de los datos puede modificar usando un script sencillo, y varios índices pueden fusionar en un solo índice.
Implementación de la API de reindex
Crea un reindexado de prueba:
POST test_reindex_source/_doc
{
"test": "test"
}Copia la configuración y los mapeos del índice fuente:
GET test_reindex_sourceCrea un índice objetivo con ajustes, mapeos y el número de fragmentos deseado:
PUT test_reindex_target
{
"mappings" : {},
"settings": {
"number_of_shards": 10,
"number_of_replicas": 0,
"refresh_interval": -1
}
}*Nota: ajustar number_of_replicas: 0 y refresh_interval: -1 aumentará la velocidad de reindexación.
Inicia el proceso de reindexación. Configurar requests_per_second=-1 y slices=auto ajustará la velocidad de reindexación.
POST _reindex?requests_per_second=-1&slices=auto&wait_for_completion=false
{
"source": {
"index": "test_reindex_source"
},
"dest": {
"index": "test_reindex_target"
}
}Verás el task_id cuando ejecutes la API de reindex. Cópila y comprueba con _tasks API:
GET _tasks/<task_id>Actualiza la configuración después de que termine el reindexado:
PUT test_reindex_target/_settings
{
"number_of_replicas": 1,
"refresh_interval": "1s"
}Consulta el índice fuente y destino docs.count antes de borrar el índice original, debería ser el mismo:
GET _cat/indices/test_reindex_*?v&h=index,pri,rep,docs.countEl nombre del índice y el nombre del alias no pueden ser iguales. Elimina el índice fuente y agrega el nombre del índice fuente como alias al índice objetivo:
DELETE test_reindex_source
PUT /test_reindex_target/_alias/test_reindex_sourceLuego de agregar el alias test_split_source al índice de test_split_target, pruébalo usando:
GET test_reindex_sourceResumen
Si quieres aumentar el recuento de fragmentos primarios de un índice existente, necesitas recrear los ajustes y asignaciones a un nuevo índice. Hay 2 métodos principales para hacerlo: la API de reindex y la API de split. La indexación activa debe detener antes de usar cualquiera de los dos métodos.




