02_collection_operations.py 3.4 KB

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