Use AUTOINDEX

更新时间:
复制 MD 格式

Vector Retrieval Service for Milvus (Milvus) provides AUTOINDEX, a feature that automatically creates optimized indexes without manual parameter tuning.

Background

During Approximate Nearest Neighbor (ANN) index creation, AUTOINDEX analyzes your data distribution and uses a machine learning model to select retrieval parameters automatically, balancing recall rate and performance.

Compared with open-source Milvus, AUTOINDEX delivers significant performance gains — benchmarks show 3x the Queries Per Second (QPS) of other index types on a specific dataset. Key optimizations include:

  • Uses SIMD (single instruction, multiple data) to accelerate queries and data storage.

  • Optimizes data graph and pruning strategies to reduce data points accessed during retrieval.

  • Uses dynamic quantization to reduce distance calculation overhead.

Prerequisites

  • The PyMilvus library is installed on your local client and is updated to the latest version.

    To install or update the PyMilvus library, run the following command.

    pip install --upgrade pymilvus
  • A Milvus instance has been created. For more information, see Create a Milvus instance.

Examples

Create a Collection

This code creates a collection without declaring the index parameter, so the collection has no index and is not loaded into memory.

from pymilvus import MilvusClient, DataType

client = MilvusClient(
    uri="http://c-xxxx.milvus.aliyuncs.com:19530",
    token="your_user:your_password",
    db_name="default"
)

schema = MilvusClient.create_schema(
    auto_id=False,
    enable_dynamic_field=True,
)

schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)
schema.add_field(field_name="vector", datatype=DataType.FLOAT_VECTOR, dim=5)

client.create_collection(
    collection_name="demo", 
    schema=schema, 
)

Replace the following parameters as needed.

Parameter

Description

uri

Milvus instance endpoint. Format: c-xxx.milvus.aliyuncs.com:19530, where c-xxx is the instance ID.

token

Username and password for database access. Default username: root.

db_name

Database name. Default: default.

collection_name

Collection name. Set to demo in this example.

Create an AUTOINDEX

Create an AUTOINDEX by configuring the index parameter and calling create_index.

from pymilvus import MilvusClient

index_params = MilvusClient.prepare_index_params()

# Index parameters for open source Milvus.

# index_params.add_index(
#     field_name="vector",
#     index_type="IVF_FLAT",
#     metric_type="L2",
#     params={"nlist": 1024}
# )

index_params.add_index(
    field_name="vector",
    metric_type="L2",
    index_type="AUTOINDEX",
)

client.create_index(
    collection_name="demo",
    index_params=index_params
)

client.load_collection(
    collection_name="demo"
)

Insert data

The following code inserts test data.

client.insert(
    collection_name="demo",
    data=[
         {"id": 0, "vector": [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592], "color": "pink_8682"},
         {"id": 1, "vector": [0.19886812562848388, 0.06023560599112088, 0.6976963061752597, 0.2614474506242501, 0.838729485096104], "color": "red_7025"},
         {"id": 2, "vector": [0.43742130801983836, -0.5597502546264526, 0.6457887650909682, 0.7894058910881185, 0.20785793220625592], "color": "orange_6781"},
         {"id": 3, "vector": [0.3172005263489739, 0.9719044792798428, -0.36981146090600725, -0.4860894583077995, 0.95791889146345], "color": "pink_9298"},
         {"id": 4, "vector": [0.4452349528804562, -0.8757026943054742, 0.8220779437047674, 0.46406290649483184, 0.30337481143159106], "color": "red_4794"},
         {"id": 5, "vector": [0.985825131989184, -0.8144651566660419, 0.6299267002202009, 0.1206906911183383, -0.1446277761879955], "color": "yellow_4222"},
         {"id": 6, "vector": [0.8371977790571115, -0.015764369584852833, -0.31062937026679327, -0.562666951622192, -0.8984947637863987], "color": "red_9392"},
         {"id": 7, "vector": [-0.33445148015177995, -0.2567135004164067, 0.8987539745369246, 0.9402995886420709, 0.5378064918413052], "color": "grey_8510"},
         {"id": 8, "vector": [0.39524717779832685, 0.4000257286739164, -0.5890507376891594, -0.8650502298996872, -0.6140360785406336], "color": "white_9381"},
         {"id": 9, "vector": [0.5718280481994695, 0.24070317428066512, -0.3737913482606834, -0.06726932177492717, -0.6980531615588608], "color": "purple_4976"}
     ],
)

Vector search

Different index types require different tuning parameters — HNSW uses ef, and IVF-type indexes use nprobe. AUTOINDEX replaces these with a single level parameter (default: 1, maximum: 5). Higher level values improve recall rate but may reduce retrieval performance. The default level achieves approximately 90% recall and suits most scenarios. Increase level if you need higher recall.

# Retrieval parameters for open source Milvus.
# search_params = {
#     "params": {"nprobe": 10}
# }

search_params = {
    "params": {"level": 1}
}

res = client.search(
    collection_name="demo",
    data=[[0.05, 0.23, 0.07, 0.45, 0.13]],
    limit=3,
    search_params=search_params
)

(Optional) View collection

On the Details page for your Milvus instance, click Attu Manager and log in with your Milvus credentials to view inserted data, vectors, and other details. Manage with the Attu tool.