mirror of
https://github.com/langchain-ai/langchain.git
synced 2026-10-10 03:45:17 +03:00
Various miscellaneous fixes to most pages in the 'Retrievers' section of the documentation: - "VectorStore" and "vectorstore" changed to "vector store" for consistency - Various spelling, grammar, and formatting improvements for readability Co-authored-by: Harrison Chase <hw.chase.17@gmail.com>
25 KiB
25 KiB
In [2]:
from langchain.embeddings import OpenAIEmbeddings
from langchain.indexes import SQLRecordManager, index
from langchain.schema import Document
from langchain.vectorstores import ElasticsearchStoreIn [2]:
collection_name = "test_index"
embedding = OpenAIEmbeddings()
vectorstore = ElasticsearchStore(
es_url="http://localhost:9200", index_name="test_index", embedding=embedding
)In [3]:
namespace = f"elasticsearch/{collection_name}"
record_manager = SQLRecordManager(
namespace, db_url="sqlite:///record_manager_cache.sql"
)In [4]:
record_manager.create_schema()In [5]:
doc1 = Document(page_content="kitty", metadata={"source": "kitty.txt"})
doc2 = Document(page_content="doggy", metadata={"source": "doggy.txt"})In [3]:
def _clear():
"""Hacky helper method to clear content. See the `full` mode section to to understand why it works."""
index([], record_manager, vectorstore, cleanup="full", source_id_key="source")In [7]:
_clear()In [8]:
index(
[doc1, doc1, doc1, doc1, doc1],
record_manager,
vectorstore,
cleanup=None,
source_id_key="source",
)Out [8]:
{'num_added': 1, 'num_updated': 0, 'num_skipped': 0, 'num_deleted': 0}In [9]:
_clear()In [10]:
index(
[doc1, doc2], record_manager, vectorstore, cleanup=None, source_id_key="source"
)Out [10]:
{'num_added': 2, 'num_updated': 0, 'num_skipped': 0, 'num_deleted': 0}In [11]:
index(
[doc1, doc2], record_manager, vectorstore, cleanup=None, source_id_key="source"
)Out [11]:
{'num_added': 0, 'num_updated': 0, 'num_skipped': 2, 'num_deleted': 0}In [12]:
_clear()In [13]:
index(
[doc1, doc2],
record_manager,
vectorstore,
cleanup="incremental",
source_id_key="source",
)Out [13]:
{'num_added': 2, 'num_updated': 0, 'num_skipped': 0, 'num_deleted': 0}In [14]:
index(
[doc1, doc2],
record_manager,
vectorstore,
cleanup="incremental",
source_id_key="source",
)Out [14]:
{'num_added': 0, 'num_updated': 0, 'num_skipped': 2, 'num_deleted': 0}In [15]:
index(
[], record_manager, vectorstore, cleanup="incremental", source_id_key="source"
)Out [15]:
{'num_added': 0, 'num_updated': 0, 'num_skipped': 0, 'num_deleted': 0}In [16]:
changed_doc_2 = Document(page_content="puppy", metadata={"source": "doggy.txt"})In [17]:
index(
[changed_doc_2],
record_manager,
vectorstore,
cleanup="incremental",
source_id_key="source",
)Out [17]:
{'num_added': 1, 'num_updated': 0, 'num_skipped': 0, 'num_deleted': 1}In [18]:
_clear()In [19]:
all_docs = [doc1, doc2]In [20]:
index(all_docs, record_manager, vectorstore, cleanup="full", source_id_key="source")Out [20]:
{'num_added': 2, 'num_updated': 0, 'num_skipped': 0, 'num_deleted': 0}In [21]:
del all_docs[0]In [22]:
all_docsOut [22]:
[Document(page_content='doggy', metadata={'source': 'doggy.txt'})]In [23]:
index(all_docs, record_manager, vectorstore, cleanup="full", source_id_key="source")Out [23]:
{'num_added': 0, 'num_updated': 0, 'num_skipped': 1, 'num_deleted': 1}In [24]:
from langchain.text_splitter import CharacterTextSplitterIn [25]:
doc1 = Document(
page_content="kitty kitty kitty kitty kitty", metadata={"source": "kitty.txt"}
)
doc2 = Document(page_content="doggy doggy the doggy", metadata={"source": "doggy.txt"})In [26]:
new_docs = CharacterTextSplitter(
separator="t", keep_separator=True, chunk_size=12, chunk_overlap=2
).split_documents([doc1, doc2])
new_docsOut [26]:
[Document(page_content='kitty kit', metadata={'source': 'kitty.txt'}),
Document(page_content='tty kitty ki', metadata={'source': 'kitty.txt'}),
Document(page_content='tty kitty', metadata={'source': 'kitty.txt'}),
Document(page_content='doggy doggy', metadata={'source': 'doggy.txt'}),
Document(page_content='the doggy', metadata={'source': 'doggy.txt'})]In [27]:
_clear()In [28]:
index(
new_docs,
record_manager,
vectorstore,
cleanup="incremental",
source_id_key="source",
)Out [28]:
{'num_added': 5, 'num_updated': 0, 'num_skipped': 0, 'num_deleted': 0}In [29]:
changed_doggy_docs = [
Document(page_content="woof woof", metadata={"source": "doggy.txt"}),
Document(page_content="woof woof woof", metadata={"source": "doggy.txt"}),
]In [30]:
index(
changed_doggy_docs,
record_manager,
vectorstore,
cleanup="incremental",
source_id_key="source",
)Out [30]:
{'num_added': 0, 'num_updated': 0, 'num_skipped': 2, 'num_deleted': 2}In [31]:
vectorstore.similarity_search("dog", k=30)Out [31]:
[Document(page_content='tty kitty', metadata={'source': 'kitty.txt'}),
Document(page_content='tty kitty ki', metadata={'source': 'kitty.txt'}),
Document(page_content='kitty kit', metadata={'source': 'kitty.txt'})]In [32]:
from langchain.document_loaders.base import BaseLoader
class MyCustomLoader(BaseLoader):
def lazy_load(self):
text_splitter = CharacterTextSplitter(
separator="t", keep_separator=True, chunk_size=12, chunk_overlap=2
)
docs = [
Document(page_content="woof woof", metadata={"source": "doggy.txt"}),
Document(page_content="woof woof woof", metadata={"source": "doggy.txt"}),
]
yield from text_splitter.split_documents(docs)
def load(self):
return list(self.lazy_load())In [33]:
_clear()In [34]:
loader = MyCustomLoader()In [35]:
loader.load()Out [35]:
[Document(page_content='woof woof', metadata={'source': 'doggy.txt'}),
Document(page_content='woof woof woof', metadata={'source': 'doggy.txt'})]In [36]:
index(loader, record_manager, vectorstore, cleanup="full", source_id_key="source")Out [36]:
{'num_added': 2, 'num_updated': 0, 'num_skipped': 0, 'num_deleted': 0}In [37]:
vectorstore.similarity_search("dog", k=30)Out [37]:
[Document(page_content='woof woof', metadata={'source': 'doggy.txt'}),
Document(page_content='woof woof woof', metadata={'source': 'doggy.txt'})]