美文网首页OpenAi
faiss 如何增量添加数据,批量数据被覆盖怎么办

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

作者: Chting | 来源:发表于2023-06-28 09:23 被阅读0次

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))

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

相关文章

网友评论

    本文标题:faiss 如何增量添加数据,批量数据被覆盖怎么办

    本文链接:https://www.haomeiwen.com/subject/dvroydtx.html