---
title: 添加索引创建判断
description: "在创建索引的过程中，Milvus经常出现程序已进入下一阶段，但索引仍在后台创建的情况。当索引创建时间较长时，程序可能会开始查询，而此时索引创建仍在后台占用大量CPU资源，导致不完整的索引和资源受限，进而使得召回率和QPS结果都很低。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdbs/testguide/tstg/kunpeng_ann_marks_019.html
sourcePath: /source/zh/kunpengdbs/testguide/tstg/kunpeng_ann_marks_019.html
indexId: 7f37934a64a7e153c89c3bbcbfaea2e28e041d600a1a1c0ee36f00dc6046af3e63
---
# 添加索引创建判断

在创建索引的过程中，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函数。

  a. 删除以下对应的源码。
    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!!!")

  b. 在函数最后添加睡眠时间，保证准备数据时间的充分。
    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()
