我使用了分层解析器进行分块,并将pinecone作为向量存储,mongodb作为文档存储。现在我想更新一些块的元数据和文本。如何做到这一点,以便在pinecone索引中的两个节点以及mongodb文档存储中的父节点上都得到反映。
uubf1zoe1#
要确保对某些数据块的元数据和文本的更新反映在Pinecone索引中的节点以及MongoDB docstore中的父节点中,你需要执行以下步骤:
upsert
def update_nodes_in_pinecone_and_mongodb(pinecone_vector_store, mongodb_docstore, nodes): # Update nodes in Pinecone index ids = [] entries = [] for node in nodes: node_id = node.node_id metadata = node_to_metadata_dict( node, remove_text=pinecone_vector_store.remove_text_from_metadata, flat_metadata=pinecone_vector_store.flat_metadata, ) entry = { ID_KEY: node_id, VECTOR_KEY: node.get_embedding(), METADATA_KEY: metadata, } if pinecone_vector_store.add_sparse_vector and pinecone_vector_store._tokenizer is not None: sparse_vector = generate_sparse_vectors( [node.get_content(metadata_mode=MetadataMode.EMBED)], pinecone_vector_store._tokenizer, )[0] entry[SPARSE_VECTOR_KEY] = sparse_vector ids.append(node_id) entries.append(entry) pinecone_vector_store._pinecone_index.upsert( entries, namespace=pinecone_vector_store.namespace, batch_size=pinecone_vector_store.batch_size, **pinecone_vector_store.insert_kwargs, ) # Update parent nodes in MongoDB docstore for node in nodes: node_id = node.node_id metadata = node_to_metadata_dict( node, remove_text=pinecone_vector_store.remove_text_from_metadata, flat_metadata=pinecone_vector_store.flat_metadata, ) mongodb_docstore.update_document( node_id, {"metadata": metadata, "text": node.get_content()} ) return ids
在这个例子中,pinecone_vector_store是PineconeVectorStore的一个示例,mongodb_docstore是MongoDocumentStore的一个示例,其中存储了父节点,而nodes是要更新的节点列表。函数update_nodes_in_pinecone_and_mongodb同时更新Pinecone索引和MongoDB docstore 1(https://github.com/run-llama/llama_index/blob/main/llama-index-integrations/vector_stores/llama-index-vector-stores-pinecone/llama_index/vector_stores/pinecone/base.py)2(https://github.com/run-llama/llama_index/blob/main/llama-index-legacy/llama_index/legacy/vector_stores/pinecone.py)3(https://github.com/run-llama/llama_index/blob/main/llama-index-legacy/tests/storage/docstore/test_mongo_docstore.py)4(https://github.com/run-llama/llama_index/blob/main/llama-index-integrations/storage/docstore/llama-index-storage-docstore-mongodb/llama_index/storage/docstore/mongodb/base.py)中的节点。
pinecone_vector_store
PineconeVectorStore
mongodb_docstore
MongoDocumentStore
nodes
update_nodes_in_pinecone_and_mongodb
1条答案
按热度按时间uubf1zoe1#
要确保对某些数据块的元数据和文本的更新反映在Pinecone索引中的节点以及MongoDB docstore中的父节点中,你需要执行以下步骤:
upsert
方法更新Pinecone索引中的节点。以下是如何实现这一点的示例:
在这个例子中,
pinecone_vector_store
是PineconeVectorStore
的一个示例,mongodb_docstore
是MongoDocumentStore
的一个示例,其中存储了父节点,而nodes
是要更新的节点列表。函数update_nodes_in_pinecone_and_mongodb
同时更新Pinecone索引和MongoDB docstore 1(https://github.com/run-llama/llama_index/blob/main/llama-index-integrations/vector_stores/llama-index-vector-stores-pinecone/llama_index/vector_stores/pinecone/base.py)2(https://github.com/run-llama/llama_index/blob/main/llama-index-legacy/llama_index/legacy/vector_stores/pinecone.py)3(https://github.com/run-llama/llama_index/blob/main/llama-index-legacy/tests/storage/docstore/test_mongo_docstore.py)4(https://github.com/run-llama/llama_index/blob/main/llama-index-integrations/storage/docstore/llama-index-storage-docstore-mongodb/llama_index/storage/docstore/mongodb/base.py)中的节点。