我使用faiss indexflatIP来存储与某些单词相关的向量。我还使用另一个列表来存储单词(列表中第n元素的向量是faiss索引中的第n个向量)。我有两个问题:
发布于 2022-04-19 15:04:22
你可以两者兼得。
调用index.add_with_ids(vectors, ids)
有些索引类型支持add_with_ids方法,但平面索引不支持。
如果调用平面索引上的方法,则会收到错误add_with_ids not implemented for this type of index。
如果要使用带有平面索引的ID,则必须使用index2 = faiss.IndexIDMap(index)。
如果您想更新一些编码,首先删除它们,然后再用add_with_ids添加它们。
如果不首先删除原始ID,则会有重复的ID,搜索结果将被搞乱。
若要删除ID数组,请调用index.remove_ids(ids_to_replace)
Nota :ID必须是np.int64类型的。
发布于 2022-03-28 06:23:28
faiss只是一个ann算法库,不能用于数据的持久化和管理。
在github上有一些开源矢量数据库,它们可以帮助您。比如milvus,vespa,等等
milvus是拥有最多星星的人
发布于 2022-03-28 18:32:42
您可以使用add_with_ids方法添加具有整数ID值的向量,我相信这也将允许您更新特定的向量--但是您需要在Faiss之外构建某种添加层的向量-ID映射和管理,因为否则不支持它。我以前也这么做过,这不是很有趣。
如果你对Faiss的替代品持开放态度,我建议你研究一下皮尼酮。它为您管理一切,所以您只需使用它们的upsert方法插入( ID,向量)对,然后更新向量,只需使用相同的ID来更新新向量。设置这个指南解释了可能需要5-10分钟。
https://stackoverflow.com/questions/71627943
复制相似问题