> For the complete documentation index, see [llms.txt](https://docs.flowiseai.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.flowiseai.com/espanol/documentacion-oficial/integraciones/langchain/record-managers.md).

# Record Managers

***

Los Record Managers hacen un seguimiento de tus documentos indexados, evitando embeddings vectoriales duplicados en [Vector Store](/espanol/documentacion-oficial/integraciones/langchain/vector-stores.md).

Cuando se realizan upserts de fragmentos de documentos, cada fragmento será hasheado usando el algoritmo [SHA-1](https://github.com/emn178/js-sha1). Estos hashes se almacenarán en el Record Manager. Si existe un hash, el proceso de embedding y upsert será omitido.

En algunos casos, podrías querer eliminar documentos existentes que se derivan de las mismas fuentes que los nuevos documentos que se están indexando. Para eso, hay 3 modos de limpieza para Record Manager:

{% tabs %}
{% tab title="Incremental" %}
Cuando estás haciendo upsert de múltiples documentos y quieres evitar la eliminación de los documentos existentes que no son parte del proceso actual de upsert, usa el modo de limpieza **Incremental**.

1. Tengamos un Record Manager con modo de limpieza `Incremental` y `source` como SourceId Key

<div align="left"><figure><img src="/files/Ebl3Ab0z9tzAddRWvg8i" alt="" width="264"><figcaption></figcaption></figure> <figure><img src="/files/bP8exxLK9lhJRKGVvjWT" alt="" width="410"><figcaption></figcaption></figure></div>

2. Y tengamos los siguientes 2 documentos:

| Texto | Metadata         |
| ----- | ---------------- |
| Cat   | `{source:"cat"}` |
| Dog   | `{source:"dog"}` |

<div align="left"><figure><img src="/files/xecz5KKzbNLxNTkecJWJ" alt="" width="202"><figcaption></figcaption></figure> <figure><img src="/files/9B5tYZ0wjfdatee0TwO0" alt="" width="563"><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="/files/ClI4F9oMhUtdT8QasTBS" alt="" width="231"><figcaption></figcaption></figure> <figure><img src="/files/iuFMWAi1jrvnZqFtKpPx" alt="" width="563"><figcaption></figcaption></figure></div>

3. Después de un upsert, veremos 2 documentos que se han insertado:

<figure><img src="/files/rPKXjTqatAXAZqecopa7" alt="" width="433"><figcaption></figcaption></figure>

4. Ahora, si eliminamos el documento **Dog** y actualizamos **Cat** a **Cats**, veremos lo siguiente:

<figure><img src="/files/e11BecM4bVxMQ3o1Rnj7" alt="" width="425"><figcaption></figcaption></figure>

* El documento original **Cat** es eliminado
* Un nuevo documento con **Cats** es añadido
* El documento **Dog** no se modifica
* Los embeddings vectoriales restantes en Vector Store son **Cats** y **Dog**

<figure><img src="/files/GTNqpQ3dw3iCoerfPrm6" alt="" width="448"><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Full" %}
Cuando estás haciendo upsert de múltiples documentos, el modo de limpieza **Full** eliminará automáticamente cualquier embedding vectorial que no sea parte del proceso actual de upsert.

1. Tengamos un Record Manager con limpieza `Full`. No necesitamos tener un SourceId Key para el modo de limpieza Full.

<div align="left"><figure><img src="/files/Ebl3Ab0z9tzAddRWvg8i" alt="" width="264"><figcaption></figcaption></figure> <figure><img src="/files/IRsDXsigzrL8V4mB86jG" alt="" width="407"><figcaption></figcaption></figure></div>

2. Y tengamos los siguientes 2 documentos:

| Texto | Metadata         |
| ----- | ---------------- |
| Cat   | `{source:"cat"}` |
| Dog   | `{source:"dog"}` |

<div align="left"><figure><img src="/files/xecz5KKzbNLxNTkecJWJ" alt="" width="202"><figcaption></figcaption></figure> <figure><img src="/files/9B5tYZ0wjfdatee0TwO0" alt="" width="563"><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="/files/ClI4F9oMhUtdT8QasTBS" alt="" width="231"><figcaption></figcaption></figure> <figure><img src="/files/iuFMWAi1jrvnZqFtKpPx" alt="" width="563"><figcaption></figcaption></figure></div>

3. Después de un upsert, veremos 2 documentos que se han insertado:

<figure><img src="/files/rPKXjTqatAXAZqecopa7" alt="" width="433"><figcaption></figcaption></figure>

4. Ahora, si eliminamos el documento **Dog** y actualizamos **Cat** a **Cats**, veremos lo siguiente:

<figure><img src="/files/4Xugg0lBMMdLrMWlO93g" alt="" width="430"><figcaption></figcaption></figure>

* El documento original **Cat** es eliminado
* Un nuevo documento con **Cats** es añadido
* El documento **Dog** es eliminado
* El único embedding vectorial restante en Vector Store es **Cats**

<figure><img src="/files/nNOCdyPFJ0tzUZKszRS8" alt="" width="527"><figcaption></figcaption></figure>
{% endtab %}

{% tab title="None" %}
No se realizará ninguna limpieza
{% endtab %}
{% endtabs %}

Los nodos Record Manager actualmente disponibles son:

* SQLite
* MySQL
* PostgresQL

## Recursos

* [LangChain Indexing - Cómo funciona](https://js.langchain.com/docs/how_to/indexing/#how-it-works)
