鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

添加索引创建判断

在创建索引的过程中,Milvus经常出现程序已进入下一阶段,但索引仍在后台创建的情况。当索引创建时间较长时,程序可能会开始查询,而此时索引创建仍在后台占用大量CPU资源,导致不完整的索引和资源受限,进而使得召回率和QPS结果都很低。

为了尽量避免这种情况,需要在整体流程的源码中加入一些判断,确保索引创建完成后再进入下一阶段。

  1. 打开module.py文件。

    假设ann-benchmarks-main文件夹路径在“/data/milvus”目录下。

    1
    vim /data/milvus/ann-benchmarks-main/ann_benchmarks/algorithms/milvus/module.py
    
  2. 引入时间相关文件,方便打印出相关阶段进行的时间。
    1
    from datetime import datetime
    
  3. 修改create_index函数。
    1. 删除以下对应的源码。
      1
      2
      3
      4
      5
      6
      index = self.collection.index(index_name = "vector_index")
      index_progress =  utility.index_building_progress(
          collection_name = self.collection_name,
          index_name = "vector_index"
      )
      print(f"[Milvus] Create index {index.to_dict()} {index_progress} for collection {self.collection_name} successfully!!!")
      
    2. 在函数最后添加睡眠时间,保证准备数据时间的充分。
      1
      sleep(300)
      
  4. 修改fit函数。

    在self.create_index()语句后面添加while循环,当满足条件才进入下一个阶段,否则进行一段时间的睡眠之后继续判断。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    self.create_index()
    
    index = self.collection.index(index_name = "vector_index")
    while True:
        index_progress =  utility.index_building_progress(
            collection_name = self.collection_name,
            index_name = "vector_index"
        )
        if index_progress["total_rows"] == index_progress["indexed_rows"] and index_progress["pending_index_rows"] == 0:
            break
        sleep(300)
    print(f"[Milvus] Create index {index.to_dict()} {index_progress} for collection {self.collection_name} successfully!!!")
    print(f"{datetime.now()} [Milvus-sync] utility.index_building_progress successfully!!!")
    
    self.load_collection()