解决milvus向量库创建并且补充入向量数据后无法索引的问题

当我们创建好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

在其他方法(如建库后)中调用时传入表名与字段名即可!

Milvus 是一个开源的高性能向量数据,专为大规模的向量数据(如深度学习中的特征表示)提供存储和搜索服务。在 Python 中,你可以使用 Milvus SDK 来方便地对数据进行向量化操作,以下是一些基本步骤: 1. **安装 Milvus**:首先,你需要从 Milvus 的 GitHub 仓或 PyPI(Python Package Index)安装 Milvus SDK,例如使用 pip: ``` pip install milvus ``` 2. **连接 Milvus**:创建 Milvus 接口对象并连接到服务器,如果本地运行,通常是 localhost 和默认端口(19530): ```python from milvus import Milvus milvus = Milvus(host="localhost", port=19530) ``` 3. **加载数据**:将 Python 列表或数组转换为向量数据,通常是 numpy 数组,然后构建索引: ```python import numpy as np vectors = np.random.rand(100, 128) # 假设我们有100个128维向量 collection_name = "my_collection" vector_field_name = "vector_field" if not milvus.has_collection(collection_name): # 创建集合和向量字段 schema = {"fields": [{"name": vector_field_name, "type": "FLOAT_VECTOR", "dim": 128}]} milvus.create_collection(schema, collection_name) # 插数据 milvus.insert(collection_name, vectors) ``` 4. **向量化搜索**:使用查询向量执行相似度搜索,例如使用 `IVF` + `FLAT` 或 `HNSW` 等搜索方法: ```python query_vector = np.random.rand(128) top_k = 10 params = {"nprobe": 32} results = milvus.search(collection_name, query_vector, top_k, params) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值