我有一个包含大约 300k 块的集合。我不认为这是一个巨大的数量,但是当应用元数据过滤器时,检索过程非常慢。有时检索 10 个文档需要长达 180 秒,而没有过滤器只需要 2 秒。
我使用 BGElarge 作为我的嵌入模型,使用 langchain returneder.invoke() 作为我的检索函数。
有人遇到同样的情况吗?我想知道是否可以加快过滤过程,例如设置索引,就像我们在 MongoDB 中可以做的那样。
我在网上查了一下,虽然有些人确实抱怨 ChromaDB 很慢,但到目前为止还没有人像我一样慢。
下面是我设置检索器的代码
def set_retriever(self, search_type='mmr', search_kwargs={'k':3}):
"""
used for document retrieval
search type is defaulted as 'mmr'
use retriever.invoke(query) to retrieve documents
"""
self.retriever = self.langchain_chroma.as_retriever(search_type=search_type, search_kwargs=search_kwargs)
return self.retriever
下面是我的检索代码
retriever = db.set_retriever(search_kwargs={
"filter":{
"publishDate":{'$gte':start_date.timestamp()}
}
}
)
t1 = time.perf_counter()
results = retriever.invoke("some question")
t2 = time.perf_counter()
print(f"total time taken: ", round(t2-t1,3))
print(results)
我还使用了 chromadb.collection.query(where={"some filter"}) 但没有帮助。