文档存储#
文档存储包含被摄取的文档块,我们称之为 Node
对象。
更多细节请参阅API 参考。
简单文档存储#
默认情况下,SimpleDocumentStore
将 Node
对象存储在内存中。
可以通过调用 docstore.persist()
(以及分别调用 SimpleDocumentStore.from_persist_path(...)
)将其持久化到磁盘(以及从磁盘加载)。
更完整的示例可以在这里找到。
MongoDB 文档存储#
我们支持 MongoDB 作为替代的文档存储后端,将数据持久化为摄入的 Node
对象。
from llama_index.storage.docstore.mongodb import MongoDocumentStore
from llama_index.core.node_parser import SentenceSplitter
# 创建解析器并将文档解析为节点
parser = SentenceSplitter()
nodes = parser.get_nodes_from_documents(documents)
# 创建(或加载)文档存储并添加节点
docstore = MongoDocumentStore.from_uri(uri="<mongodb+srv://...>")
docstore.add_documents(nodes)
# 创建存储上下文
storage_context = StorageContext.from_defaults(docstore=docstore)
# 构建索引
index = VectorStoreIndex(nodes, storage_context=storage_context)
在幕后,MongoDocumentStore
连接到一个固定的 MongoDB 数据库,并初始化新的集合(或加载现有的集合)以存储您的节点。
注意:在使用
MongoDocumentStore
时,不需要调用storage_context.persist()
(或docstore.persist()
),因为数据默认会被持久化。
您可以通过重新初始化具有现有 db_name
和 collection_name
的 MongoDocumentStore
轻松重新连接到您的 MongoDB 集合并重新加载索引。
更完整的示例可以在这里找到。
Redis 文档存储#
我们支持 Redis 作为替代的文档存储后端,将数据持久化为摄入的 Node
对象。
from llama_index.storage.docstore.redis import RedisDocumentStore
from llama_index.core.node_parser import SentenceSplitter
# 创建解析器并将文档解析为节点
parser = SentenceSplitter()
nodes = parser.get_nodes_from_documents(documents)
# 创建(或加载)文档存储并添加节点
docstore = RedisDocumentStore.from_host_and_port(
host="127.0.0.1", port="6379", namespace="llama_index"
)
docstore.add_documents(nodes)
# 创建存储上下文
storage_context = StorageContext.from_defaults(docstore=docstore)
# 构建索引
index = VectorStoreIndex(nodes, storage_context=storage_context)
在幕后,RedisDocumentStore
连接到一个 Redis 数据库,并将您的节点添加到存储在 {namespace}/docs
下的命名空间中。
注意:在实例化
RedisDocumentStore
时,可以配置namespace
,否则默认为namespace="docstore"
。
您可以通过重新初始化具有现有 host
、port
和 namespace
的 RedisDocumentStore
轻松重新连接到您的 Redis 客户端并重新加载索引。
更完整的示例可以在这里找到。
Firestore 文档存储#
我们支持 Firestore 作为替代的文档存储后端,将数据持久化为摄入的 Node
对象。
from llama_index.storage.docstore.firestore import FirestoreDocumentStore
from llama_index.core.node_parser import SentenceSplitter
# 创建解析器并将文档解析为节点
parser = SentenceSplitter()
nodes = parser.get_nodes_from_documents(documents)
# 创建(或加载)文档存储并添加节点
docstore = FirestoreDocumentStore.from_database(
project="project-id",
database="(default)",
)
docstore.add_documents(nodes)
# 创建存储上下文
storage_context = StorageContext.from_defaults(docstore=docstore)
# 构建索引
index = VectorStoreIndex(nodes, storage_context=storage_context)
在幕后,FirestoreDocumentStore
连接到 Google Cloud 中的一个 Firestore 数据库,并将您的节点添加到存储在 {namespace}/docs
下的命名空间中。
注意:在实例化
FirestoreDocumentStore
时,可以配置namespace
,否则默认为namespace="docstore"
。
您可以通过重新初始化具有现有 project
、database
和 namespace
的 FirestoreDocumentStore
轻松重新连接到您的 Firestore 数据库并重新加载索引。
更完整的示例可以在这里找到。