¿Todavía no conoces Elasticsearch? Únete a nuestro webinar de los Primeros pasos con Elasticsearch. También puedes iniciar una prueba gratuita en el cloud o prueba Elastic en tu máquina ahora mismo.
Desde la versión 8.16, los usuarios pudieron configurar la estrategia de fragmentación empleada al ingirir documentos largos en campos de texto semánticos. A partir de 9.1 / 8.19, introdujimos una nueva estrategia configurable de fragmentación recursiva que emplea una lista de expresiones regulares para fragmentar el documento. El objetivo del chunking es dividir un documento largo en secciones que encapsulen contenido relacionado. Nuestras estrategias actuales dividirán el texto en un detalle de palabras/oraciones, pero los documentos escritos en formatos estructurados (por ejemplo, Markdown) a menudo contienen contenido relacionado dentro de secciones definidas por algunas cadenas de separación (por ejemplo, cabeceras). Para este tipo de documentos, introducimos la estrategia de fragmentación recursiva para aprovechar el formato de documentos estructurados y crear mejores fragmentos.
¿Qué es el chunking recursivo?
El fragmento recursivo iterará a través de una lista de secciones proporcionadas que separan patrones para dividir progresivamente un documento en segmentos más pequeños hasta alcanzar el tamaño máximo deseado del fragmento.
¿Cómo configuro el chunking recursivo?
A continuación se presentan los valores configurables proporcionados por el usuario para el fragmento recursivo:
- (requerido)
max_chunk_size: El número máximo de palabras en un bloque. - Cualquiera de:
separators: Una lista de patrones de cadenas regex que se usarán para dividir el documento en bloques.separator_group: Una cadena que se mapea a una lista predeterminada de separadores definida por Elastic para usar en tipos específicos de documentos. Actualmente, haymarkdownyplaintextdisponibles.
¿Cómo funciona el chunking recursivo?
El proceso de fragmentación recursiva dado un documento de entrada, una max_chunk_size (medida en palabras) y una lista de cadenas de separadores es el siguiente:
- Si el documento de entrada ya está dentro del tamaño máximo del bloque, devuelva un solo bloque que cubra toda la entrada.
- Divide el texto en posibles fragmentos según la aparición del separador. Para cada segmento potencial:
- Si el chunk potencial está dentro del tamaño máximo del chunk, agrégalo a la lista de chunks para devolverlos al usuario.
- De lo contrario, repite desde el paso 2, usando solo el texto del posible fragmento y dividiendo usando el siguiente separador de la lista. Si ya no quedan separadores por probar, recurre a fragmentos basados en frases.
Ejemplos de configuración del chunking recursivo
Además del tamaño del bloque, la configuración principal para el fragmento recursivo es seleccionar qué separadores deben usar para dividir tus documentos. Si no sabes por dónde empezar, Elasticsearch ofrece algunos grupos de separadores por defecto que se pueden usar en casos de uso comunes.
Utilización de grupos separadores
Para emplear un grupo separador, simplemente indica el nombre del grupo que quieres usar al configurar la configuración de fragmentos. Por ejemplo:
Esto te dará una estrategia de fragmentación recursiva que emplea la lista de separadores ["(?<!\\n)\\n\\n(?!\\n)", "(?<!\\n)\\n(?!\\n)")]. Esto funciona bien para aplicaciones genéricas de texto plano, dividiendo en 2 caracteres de nueva línea, seguidos de 1 carácter de nueva línea.
También ofrecemos un grupo de separadores markdown que empleará la lista de separadores:
Esta lista de separadores funcionará bien para casos generales de reducción de categorías, dividiendo en cada uno de los 6 niveles de encabezado y en los caracteres que rompen secciones.
Al crear un recurso (extremo de inferencia/campo de texto semántico), la lista de separadores correspondiente al grupo de separadores en ese momento se almacenará en tus configuraciones. Si el grupo separador se actualiza más adelante, no cambiará el comportamiento de los recursos ya creados.
Empleando una lista de separadores personalizada
Si uno de los grupos de separadores predefinidos no funciona para tu caso de uso, puedes definir una lista personalizada de separadores que se adapte a tus necesidades. Ten en cuenta que las expresiones regulares pueden proporcionar dentro de la lista de separadores. A continuación se muestra un ejemplo de configuración de fragmentación configurada con separadores personalizados:
La estrategia de fragmentación anterior se dividirá en 2 caracteres de nueva línea, seguidos de 1 carácter de nueva línea y, por último, en una cadena “<my-custom-separator>”.
Un ejemplo de fragmentación recursiva en acción
Veamos un ejemplo de fragmentación recursiva en acción. Para este ejemplo, usaremos los siguientes ajustes de fragmentación con una lista personalizada de separadores que dividen un documento markdown usando los dos niveles superiores de cabecera:
Veamos un documento sencillo de Markdown sin fragmentos:

Ahora usemos los ajustes de fragmentación definidos arriba para fragmentar el documento:



Nota: La nueva línea al final de cada bloque (excepto el Fragmento 3) no está resaltada, pero sí se incluye dentro de los límites reales del bloque.
¡Empieza hoy mismo con el chunking recursivo!
Para más información sobre cómo emplear esta función, consulta la documentación sobre cómo configurar la configuración de fragmentos.




