跳到主要内容
版本:v3.0.x

STL_SORT

STL_SORT 索引是一种专门设计用于提高数值字段(INT8、INT16 等)、VARCHAR 字段或TIMESTAMPTZ 字段查询性能的索引类型,其方法是按排序顺序组织数据。

如果您经常运行以下查询,请使用STL_SORT 索引:

  • 使用==,!=,>,<,>=<= 操作符进行比较筛选

  • 使用INLIKE 操作符进行范围过滤

支持的数据类型

工作原理

Milvus 分两个阶段实现STL_SORT

  1. 建立索引

    • 在采集过程中,Milvus 会收集索引字段的所有值。

    • 这些值使用 C++ STL 的std::sort 按升序排序。

    • 每个值与其实体 ID 配对,排序后的数组作为索引持久化。

  2. 加速查询

    • 在查询时,Milvus 对排序数组使用二进制搜索(std::lower_boundstd::upper_ bound)。

    • 对于相等值,Milvus 能快速找到所有匹配值。

    • 对于范围,Milvus 会定位开始和结束位置,并返回两者之间的所有值。

    • 匹配的实体 ID 会被传递给查询执行器,以便组装最终结果。

这将查询复杂度从O(n)(全扫描)降低到O(log n + m),其中m是匹配数。

创建 STL_SORT 索引

您可以在数字或TIMESTAMPTZ 字段上创建STL_SORT 索引。无需额外参数。

下面的示例显示了如何在TIMESTAMPTZ 字段上创建STL_SORT 索引:

from pymilvus import MilvusClient

client = MilvusClient(uri="http://localhost:19530") # Replace with your server address

# Assume you have defined a TIMESTAMPTZ field named "tsz" in your collection schema

# Prepare index parameters
index_params = client.prepare_index_params()

# Add RTREE index on the "tsz" field
index_params.add_index(
field_name="tsz",
index_type="STL_SORT", # Index for TIMESTAMPTZ
index_name="tsz_index", # Optional, name your index
params={} # No extra params needed
)

# Create the index on the collection
client.create_index(
collection_name="tsz_demo",
index_params=index_params
)

删除索引

使用drop_index() 方法从 Collection 中删除现有索引。

client.drop_index(
collection_name="tsz_demo", # Name of the collection
index_name="tsz_index" # Name of the index to drop
)

使用说明

  • **字段类型:**适用于数字和TIMESTAMPTZ 字段。有关数据类型的更多信息,请参阅布尔与数字以及TIMESTAMPTZ 字段

  • **参数:**不需要索引参数。

  • 不支持内存映射: STL_SORT 不支持内存映射模式。