# 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)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.flowiseai.com/espanol/documentacion-oficial/integraciones/langchain/record-managers.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
