问题验证
- 我已经在文档和discord上寻找答案。
问题
假设我加载了一个向量存储,如下所示:vector_store = RedisVectorStore(redis_client=redis_client, schema=index_schema, overwrite=False)
我如何删除所有具有元数据的文档并插入新的文档?
似乎我不能这样做:existing_docs = vector_store.query(filter=MetadataFilters(filters=[ExactMatchFilter(key="merchant_id", value=merchant_id)]))
总是需要查询字符串。
4条答案
按热度按时间txu3uszq1#
要删除具有特定元数据的文档并在
RedisVectorStore
中插入新文档,可以按照以下步骤操作:使用
delete_nodes
方法根据元数据过滤器删除文档。加载新文档并将其插入到
RedisVectorStore
中。以下是一个示例代码片段,用于实现此操作:
此代码片段演示了如何删除具有特定元数据的文档并将新文档插入到
RedisVectorStore
中。根据您的特定用例调整过滤器和路径。6za6bjd02#
aemubtdh3#
在未实现
delete_nodes
方法的情况下,要删除具有特定元数据的RedisVectorStore
文档,可以使用带有适当过滤器的delete
方法。以下是一个示例:from llama_index.vector_stores.redis import RedisVectorStore
from llama_index.core.vector_stores import MetadataFilters, MetadataFilter, FilterOperator
from redis import Redis
Create a Redis client connection
redis_client = Redis.from_url("redis://localhost:6379")
Create the vector store wrapper
vector_store = RedisVectorStore(redis_client=redis_client, overwrite=False)
Define metadata filters
filters = MetadataFilters(
filters=[
MetadataFilter(key="merchant_id", value="specific_merchant_id", operator=FilterOperator.EQ),
# Add more filters as needed
]
)
Use the delete method with the filters
vector_store.delete(filters=filters)
def delete_documents_with_metadata(redis_store, filters):
filter_expression = redis_store._create_redis_filter_expression(filters)
total = redis_store._index.query(CountQuery(filter_expression))
delete_query = FilterQuery(
return_fields=[NODE_ID_FIELD_NAME],
filter_expression=filter_expression,
num_results=total,
)
docs_to_delete = redis_store._index.search(delete_query.query, delete_query.params)
with redis_store._index.client.pipeline(transaction=False) as pipe:
for doc in docs_to_delete.docs:
pipe.delete(doc.id)
pipe.execute()
Example usage
delete_documents_with_metadata(vector_store, filters)
4xrmg8kj4#
有人需要贡献并实现delete_nodes(说实话,也需要get_nodes)