| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- from pymilvus import DataType, MilvusClient
- client = MilvusClient(uri="http://localhost:19530")
- # 2 collection集合的操作
- def operate_table():
- # 脚本可重复运行:先清理上一次留下的 collection
- if client.has_collection(collection_name='demo_v1'):
- client.drop_collection(collection_name='demo_v1')
- # 定义schema
- ## 注意:在定义集合 Schema 时,enable_dynamic_field=True 使得您可以插入未定义的字段。一般动态字段以 JSON 格式存储,通常命名为 $meta。在插入数据时,所有未定义的字段及其值将被保存为键值对。
- ## 在定义集合 Schema 时,auto_id=True 可以对主键自动增长id。
- schema = client.create_schema(auto_id=False, enable_dynamic_field=True)
- # # schema添加字段id, vector
- schema.add_field(field_name='id', datatype=DataType.INT64, is_primary=True)
- schema.add_field(field_name='vector', datatype=DataType.FLOAT_VECTOR, dim=5)
- schema.add_field(field_name='scalar1', datatype=DataType.VARCHAR, max_length=256, description='标量字段')
- # # 创建集合
- client.create_collection(collection_name='demo_v1', schema=schema)
- # # 设置索引
- index_params = client.prepare_index_params()
- # # 在向量字段vector上面添加一个索引;
- # index_type='', # 留空以使用自动索引 —— 当前 pymilvus/Milvus Lite 版本要求显式指定 index_type,这里用 'AUTOINDEX' 代替课件里的空字符串写法
- # 对于向量字段,常见的默认索引类型包括IVF_FLAT或HNSW等,具体取决于数据的特性和查询需求。
- # 对于标量字段,常见的默认索引可能是INVERTED等。
- index_params.add_index(field_name='vector', metric_type="COSINE", index_type='AUTOINDEX', index_name="vector_index")
- client.create_index(collection_name='demo_v1', index_params=index_params)
- #
- # # 查看索引信息
- res = client.list_indexes(collection_name='demo_v1')
- print(f'索引信息-->{res}')
- # 当前 Milvus Lite 版本以字段名作为实际生效的 index_name(自定义的 index_name 不会生效),
- # 所以通过 list_indexes(field_name=...) 拿到真实的 index_name 再查询详情。
- vector_index_name = client.list_indexes(collection_name='demo_v1', field_name='vector')[0]
- res = client.describe_index(collection_name='demo_v1', index_name=vector_index_name)
- print(f'指定索引详细信息-->{res}')
- # 查看索引状态
- # client.load_collection(collection_name='demo_v1')
- # print(client.get_load_state(collection_name='demo_v1'))
- # 如果不需要索引,可以删除相关索引
- # client.release_collection(collection_name='demo_v1')
- # client.drop_index(collection_name='demo_v1', index_name='vector_index')
- # # 检索标量字段
- index_params1 = client.prepare_index_params()
- index_params1.add_index(field_name='scalar1', index_type='INVERTED', index_name='default_index')
- client.create_index(collection_name='demo_v1', index_params=index_params1)
- # #
- # # # 查看索引信息
- res = client.list_indexes(collection_name='demo_v1')
- print(f'索引信息-->{res}')
- #
- scalar_index_name = client.list_indexes(collection_name='demo_v1', field_name='scalar1')[0]
- res = client.describe_index(collection_name='demo_v1', index_name=scalar_index_name)
- print(f'指定索引详细信息-->{res}')
- if __name__ == '__main__':
- operate_table()
|