Skip to content

每个raw_vector对象会有一个VIDMgr对象,请问这个对象的作用是什么? #4

Description

@rrjia

有两个疑问:
按照代码的逻辑是:如果存在多个向量字段,字段名相同,那么这些向量对应的raw_vector对象内就需要一个VIDMgr对象;
std::vector vid2docid_; // vector id to doc id,数组下标指vectorId,对应的值指docId
std::vector<int *> docid2vid_; // doc id to vector id list,一个doc_id,可以对应多个向量????
为甚么会存在一个docid对应多个vectorId这种情况呢?

第二在Add方法中
int Add(int vid, int docid)
{
// add to vid2docid_ and docid2vid_
if (multi_vids_)
{
vid2docid_[vid] = docid;
if (docid2vid_[docid] == nullptr)
{
docid2vid_[docid] = utils::NewArray(MAX_VECTOR_NUM_PER_DOC + 1, "init_vid_list");
// total_mem_bytes += (MAX_VECTOR_NUM_PER_DOC + 1) * sizeof(int);
docid2vid_[docid][0] = 1; // 第一个位置设为1表示 这个doc下面有1一个向量
docid2vid_[docid][1] = vid; // 第二个位置才开始设置vectorId
}
else
{
int *vid_list = docid2vid_[docid];
// 一个表格最多有10个字段为向量而且还同名
if (vid_list[0] + 1 > MAX_VECTOR_NUM_PER_DOC)
{
return -1;
}
vid_list[vid_list[0]] = vid; // 这个有点不对吧?vid_list[vid_list[0]+1]=vid,在数组的下个位置记下vectorId
vid_list[0]++; // 这个doc有的向量数据+1
}
}
return 0;
}

当docid2vid_[docid] != nullptr时,vectorI的写入的位置是否有误,谢谢

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions