id: example_code.md related_key: pymilvus label: Python order: 0 group: example_code.md

summary: Get started with Milvus faster using this Python example code.

{{tab}}

使用 Python 运行Milvus

该篇文章介绍了如何使用 Python 运行 Milvus.

通过运行我们提供的示例代码,您将初步了解 Milvus 的功能。

准备工作

下载示例代码

使用下面的命令 下载 hello_milvus.py

  1. $ wget https://raw.githubusercontent.com/milvus-io/pymilvus/v{{var.milvus_python_sdk_version}}/examples/hello_milvus.py

代码详解

示例代码将执行以下步骤:

  • 导入 PyMilvus 包:

    1. from pymilvus import (
    2. connections,
    3. utility,
    4. FieldSchema,
    5. CollectionSchema,
    6. DataType,
    7. Collection,
    8. )
  • 连接服务:

    1. connections.connect("default", host="localhost", port="19530")
  • 创建一个 Collection:

    1. fields = [
    2. FieldSchema(name="pk", dtype=DataType.INT64, is_primary=True, auto_id=False),
    3. FieldSchema(name="random", dtype=DataType.DOUBLE),
    4. FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=8)
    5. ]
    6. schema = CollectionSchema(fields, "hello_milvus is the simplest demo to introduce the APIs")
    7. hello_milvus = Collection("hello_milvus", schema)
  • 在创建好的 Collection 中插入向量:

    1. import random
    2. entities = [
    3. [i for i in range(3000)], # field pk
    4. [float(random.randrange(-20, -10)) for _ in range(3000)], # field random
    5. [[random.random() for _ in range(8)] for _ in range(3000)], # field embeddings
    6. ]
    7. insert_result = hello_milvus.insert(entities)
  • 在数据上构建索引:

    1. index = {
    2. "index_type": "IVF_FLAT",
    3. "metric_type": "L2",
    4. "params": {"nlist": 128},
    5. }
    6. hello_milvus.create_index("embeddings", index)
  • 将 Collection 加载到内存并执行相似搜索:

    1. hello_milvus.load()
    2. vectors_to_search = entities[-1][-2:]
    3. search_params = {
    4. "metric_type": "l2",
    5. "params": {"nprobe": 10},
    6. }
    7. result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, output_fields=["random"])
  • 执行结构化查询:
  1. result = hello_milvus.query(expr="random > -14", output_fields=["random", "embeddings"])
  • 执行混合查询:
  1. result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, expr="random > -12", output_fields=["random"])
  • 根据 pk 删除数据:
  1. expr = f"pk in [{ids[0]}, {ids[1]}]"
  2. hello_milvus.delete(expr)
  • 删除 Collection:
  1. utility.drop_collection("hello_milvus")

运行示例代码

执行以下命令,运行示例代码:

  1. $ python3 hello_milvus.py

运行结果如下所示:

  1. === start connecting to Milvus ===
  2. Does collection hello_milvus exist in Milvus: False
  3. === Create collection `hello_milvus` ===
  4. === Start inserting entities ===
  5. Number of entities in Milvus: 3000
  6. === Start Creating index IVF_FLAT ===
  7. === Start loading ===
  8. === Start searching based on vector similarity ===
  9. hit: (distance: 0.0, id: 2998), random field: -11.0
  10. hit: (distance: 0.11455299705266953, id: 1581), random field: -18.0
  11. hit: (distance: 0.1232629269361496, id: 2647), random field: -13.0
  12. hit: (distance: 0.0, id: 2999), random field: -11.0
  13. hit: (distance: 0.10560893267393112, id: 2430), random field: -18.0
  14. hit: (distance: 0.13938161730766296, id: 377), random field: -14.0
  15. search latency = 0.2796s
  16. === Start querying with `random > -14` ===
  17. query result:
  18. -{'pk': 9, 'random': -13.0, 'embeddings': [0.298433, 0.931987, 0.949756, 0.598713, 0.290125, 0.094323, 0.064444, 0.306993]}
  19. search latency = 0.2970s
  20. === Start hybrid searching with `random > -12` ===
  21. hit: (distance: 0.0, id: 2998), random field: -11.0
  22. hit: (distance: 0.15773043036460876, id: 472), random field: -11.0
  23. hit: (distance: 0.3273330628871918, id: 2146), random field: -11.0
  24. hit: (distance: 0.0, id: 2999), random field: -11.0
  25. hit: (distance: 0.15844076871871948, id: 2218), random field: -11.0
  26. hit: (distance: 0.1622171700000763, id: 1403), random field: -11.0
  27. search latency = 0.3028s
  28. === Start deleting with expr `pk in [0, 1]` ===
  29. query before delete by expr=`pk in [0, 1]` -> result:
  30. -{'pk': 0, 'random': -18.0, 'embeddings': [0.142279, 0.414248, 0.378628, 0.971863, 0.535941, 0.107011, 0.207052, 0.98182]}
  31. -{'pk': 1, 'random': -15.0, 'embeddings': [0.57512, 0.358512, 0.439131, 0.862369, 0.083284, 0.294493, 0.004961, 0.180082]}
  32. query after delete by expr=`pk in [0, 1]` -> result: []
  33. === Drop collection `hello_milvus` ===

恭喜!您已经启动了 Milvus 单机版,并执行了第一次结构化查询。