faiss 如何增量添加数据,批量数据被覆盖怎么办

faiss 默认是覆盖索引模式,langchain文档提供了merge的方式,我们试试看能达到我们想要的增加索引的效果吗

def save_documents_slice(documents, index="finance_index",slice_size= 100):
    print("documents:", str(len(documents)))
    docs = text_splitter.split_documents(documents)
    print("docs:", str(len(docs)))
    len_doc = len(docs)
    db_num = 1##定义第一个初始值,当为1时使用原始db,否则新建一个db
    for i in range(0,len_doc , slice_size):
        slice_docs = docs[i:i+slice_size]
        print("当前第:",str(i))
        item_slice_docs = []
        for doc in slice_docs:
            # print("page_content",doc.page_content)
            if len(doc.page_content) < 50:
                print("当前内容过少跳过:",doc.page_content)
                continue;
            item_slice_docs.append(doc)

        if item_slice_docs:
            if db_num == 1:
                db =  FAISS.from_documents(slice_docs, embeddings)
            else:
                db1 = FAISS.from_documents(slice_docs, embeddings)
                db.merge_from(db1)##新的db和原始db合并,

            db_num+=1

    db.save_local(index)
    return db

方法中真对大数据量,增加了切片方式进行插入,同时利用merge方式,创建两个db,最终合并成完整的向量数据,下面验证一下吧

all_list = db.docstore._dict
print(len(all_list))

可以看到最后的数量是都存进去了

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容