Use AUTOINDEX
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 pymilvusA 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 |
|
|
Milvus instance endpoint. Format: |
|
|
Username and password for database access. Default username: root. |
|
|
Database name. Default: default. |
|
|
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.