Skip to main content

[ ![🦜️🔗 Langchain](/img/brand/wordmark.png) ![🦜️🔗
Langchain](/img/brand/wordmark-dark.png) ](/) [ Docs
](/docs/get_started/introduction) [ Use cases ](/docs/use_cases) [
Integrations ](/docs/integrations/platforms/) [ Guides
](/docs/guides/debugging) [ API  ](https://api.python.langchain.com)

More

  * [ People ](/docs/people/)
  * [ Versioning ](/docs/packages)
  * [ Changelog ](/docs/changelog)
  * [ Contributing ](/docs/contributing)
  * [ Templates ](/docs/templates/)
  * [ Cookbooks  ](https://github.com/langchain-ai/langchain/blob/master/cookbook/README.md)
  * [ Tutorials ](/docs/additional_resources/tutorials)
  * [ YouTube ](/docs/additional_resources/youtube)

🦜️🔗

  * [ LangSmith  ](https://smith.langchain.com)
  * [ LangSmith Docs  ](https://docs.smith.langchain.com/)
  * [ LangServe GitHub  ](https://github.com/langchain-ai/langserve)
  * [ Templates GitHub  ](https://github.com/langchain-ai/langchain/tree/master/templates)
  * [ Templates Hub  ](https://templates.langchain.com)
  * [ LangChain Hub  ](https://smith.langchain.com/hub)
  * [ JS/TS Docs  ](https://js.langchain.com)

[ 💬  ](https://chat.langchain.com) [ ](https://github.com/langchain-
ai/langchain)

Search

  * [ Get started ](/docs/get_started)

    * [ Introduction ](/docs/get_started/introduction)
    * [ Installation ](/docs/get_started/installation)
    * [ Quickstart ](/docs/get_started/quickstart)
    * [ Security ](/docs/security)
  * [ LangChain Expression Language ](/docs/expression_language/)

    * [ Get started ](/docs/expression_language/get_started)
    * [ Why use LCEL ](/docs/expression_language/why)
    * [ Interface ](/docs/expression_language/interface)
    * [ Streaming ](/docs/expression_language/streaming)
    * [ How to ](/docs/expression_language/how_to/)

    * [ Cookbook ](/docs/expression_language/cookbook/)

    * [ LangChain Expression Language (LCEL) ](/docs/expression_language/)
  * [ Modules ](/docs/modules/)

    * [ Model I/O ](/docs/modules/model_io/)

    * [ Retrieval ](/docs/modules/data_connection/)

      * [ Document loaders ](/docs/modules/data_connection/document_loaders/)

      * [ Text Splitters ](/docs/modules/data_connection/document_transformers/)

      * [ Retrieval ](/docs/modules/data_connection/)
      * [ Text embedding models ](/docs/modules/data_connection/text_embedding/)

      * [ Vector stores ](/docs/modules/data_connection/vectorstores/)
      * [ Retrievers ](/docs/modules/data_connection/retrievers/)

      * [ Indexing ](/docs/modules/data_connection/indexing)
    * [ Agents ](/docs/modules/agents/)

    * [ Chains ](/docs/modules/chains)
    * [ More ](/docs/modules/memory/)

  * [ LangServe ](/docs/langserve)
  * [ LangSmith ](/docs/langsmith/)

  * [ LangGraph ](/docs/langgraph)

  * [ ](/)
  * [ Modules  ](/docs/modules/)
  * [ Retrieval  ](/docs/modules/data_connection/)
  * Indexing 

On this page

#  Indexing

Here, we will look at a basic indexing workflow using the LangChain indexing
API.

The indexing API lets you load and keep in sync documents from any source into
a vector store. Specifically, it helps:

  * Avoid writing duplicated content into the vector store 
  * Avoid re-writing unchanged content 
  * Avoid re-computing embeddings over unchanged content 

All of which should save you time and money, as well as improve your vector
search results.

Crucially, the indexing API will work even with documents that have gone
through several transformation steps (e.g., via text chunking) with respect to
the original source documents.

##  How it works  ​

LangChain indexing makes use of a record manager ( ` RecordManager ` ) that
keeps track of document writes into the vector store.

When indexing content, hashes are computed for each document, and the
following information is stored in the record manager:

  * the document hash (hash of both page content and metadata) 
  * write time 
  * the source id – each document should include information in its m