删除 ChromaDB 文档时遇到问题

问题描述 投票:0回答:1

我似乎无法从 Chroma 矢量数据库中删除文档。如果您能了解此示例为何不起作用,以及可以/应该进行哪些修改才能使其正常运行,我将不胜感激。

import dotenv
import os
import chromadb
from chromadb.config import Settings
from chromadb.utils import embedding_functions

dotenv.load_dotenv()

client = chromadb.Client(
    Settings(chroma_db_impl="duckdb+parquet", persist_directory="db/chroma")
)

embedding = embedding_functions.OpenAIEmbeddingFunction(
    api_key=os.getenv("OPENAI_API_KEY"),
    model_name="text-embedding-ada-002",
)

collection = client.get_or_create_collection(name="test", embedding_function=embedding)

from llama_index import SimpleDirectoryReader

documents = SimpleDirectoryReader(
    input_dir="./sampledir",
    recursive=True,
    exclude_hidden=False,
    filename_as_id=True,
).load_data()

collection.add(
    documents=[doc.get_text() for doc in documents],
    ids=[doc.doc_id for doc in documents],
)

print(collection.count())  # PRINTS n

doc_ids = collection.get()["ids"]
collection.delete(ids=doc_ids)

print(collection.count())  # SHOULD BE ZERO, BUT PRINTS n
python database artificial-intelligence openai-api chromadb
1个回答
0
投票

这可能对任何在 ChromaDB 中搜索删除文档的人有帮助

按ID删除

获取集合,您可以按照文档中提到的任何步骤进行操作,如下所示:

collection = client.get_collection(name="collection_name")
collection.delete(ids="id_value")

通过过滤元数据删除

collection = client.get_collection(name="collection_emb")
collection.delete(where={'metadata_field': {'<Operator>': '<Value>'}})

如果您有带有键

URL
的元数据,并且您想要删除 URL 等于
www.example.com

的所有文档
collection.delete(where={'URL': {'$eq': 'www.example.com'}})

过滤元数据支持以下运算符:

$eq
- 等于(字符串、int、float)
$ne
- 不等于(字符串、整数、浮点数)
$gt
- 大于(int,float)
$gte
- 大于或等于 (int, float)
$lt
- 小于(int,float)
$lte
- 小于或等于(int,float)

有关如何使用元数据进行过滤的更多信息,请参阅此处的文档

© www.soinside.com 2019 - 2024. All rights reserved.