当我们创建好milvus向量库并且补充入向量数据后进行索引时发现了如下的错误:
<MilvusException: (code=65535, message=failed to search/query delegator 3 for channel by-dev-rootcoord-dml_1_450901731962528612v0: fail to Search, QueryNode ID=3, reason=worker(3) query failed: Assert "range_filter < radius" at /go/src/github.com/milvus-io/milvus/internal/core/src/common/RangeSearchHelper.cpp:125
=> range_filter must be less than radius for L2/HAMMING/JACCARD)>
进过一番排查,发现这是向量库没有创建索引导致的问题,那么我们该如何在创建向量库时同时将索引一起创建呢?
使用milvus的可视化插件attu便可查看索引创建的方法
在建好的表中可以看到每个字段都有创建索引,我们点击一个字段进行查看
索引名称我们根据规范填入“index_”加上你要创建索引的字段名,因为我是使用灵积的1536维进行的向量化,所以索引类型我这里选择的是IVF_FLAT,度量类型则是选择COSINE,nlist则是维度的选择。
选择完成配置后点击左下角查看代码,则可以弹出创建该索引的完整代码,我们放入自己封装的方法中即可。
当完成创建索引后我们会发现,刚刚建立的索引并未进行加载,而没有加载的索引时无法使用的,所以我们还需要一个加载索引的方法,在刚刚封装的方法中加入如下代码
collection.load(partition_name="index_" + field_name)
即可完成加载,将代码整合后,我们便可以得到一个一件创建并加载索引的方法:
def createIndex(self, collection_name, field_name):
collection = Collection(name=collection_name)
index_params = {
"index_type": "IVF_FLAT",
"metric_type": "COSINE",
"params": {
"nlist": 1536
}
}
res = collection.create_index(
field_name=field_name,
index_params=index_params,
index_name="index_" + field_name
)
collection.load(partition_name="index_" + field_name)
return res
在其他方法(如建库后)中调用时传入表名与字段名即可!