• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

milvus

date: 2024-07-06 excerpt: milvusの概要と使い方

tag: milvus


milvusの概要と使い方

概要

  • OSSのvector store

実行

$ docker pull milvusdb/milvus:latest
$ docker run -d --name milvus -p 19530:19530 -p 9091:9091 milvusdb/milvus:latest

Python Clientのインストール

$ pip install pymilvus

Python Clientの使い方

フィールドを定義し、コレクションを作成する

from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection

# Milvusに接続
connections.connect("default", host="localhost", port="19530")

# フィールドの定義
fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
    FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=512),
    FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=1536)  # 例として1536次元の埋め込みベクトル
]

# コレクションスキーマの定義
schema = CollectionSchema(fields, "Text collection")

# コレクションの作成
collection = Collection("text_collection", schema)

# テキストデータの準備と挿入
texts = ["This is a sample text.", "Another example text.", "More text data for embedding."]
embeddings = [get_embedding(text) for text in texts]

collection.insert([texts, embeddings])

# インデックスの作成
index_params = {
    "index_type": "IVF_FLAT",
    "metric_type": "L2",
    "params": {"nlist": 128}
}
collection.create_index("embedding", index_params)
collection.load()

検索

# 検索クエリテキストの埋め込みを取得
query_text = "Sample search query."
query_embedding = get_embedding(query_text)

# 検索の実行
search_params = {"metric_type": "L2", "params": {"nprobe": 10}}
results = collection.search([query_embedding], "embedding", search_params, limit=5, output_fields=["text"])

# 検索結果の表示
for result in results[0]:
    print(f"ID: {result.id}, Distance: {result.distance}, Text: {result.entity.get('text')}")
"""
ID: 450921762817052061, Distance: 0.3035614490509033, Text: This is a sample text.
ID: 450921762817052062, Distance: 0.37800854444503784, Text: Another example text.
ID: 450921762817052063, Distance: 0.4625099301338196, Text: More text data for embedding.
"""

新しいデータの挿入

import openai
import os
from pymilvus import connections, Collection

# Milvusに接続
connections.connect("default", host="localhost", port="19530")

# 既存のコレクションに接続
collection = Collection("text_collection")

# 新しいテキストデータの準備と挿入
new_texts = ["New sample text.", "Additional text for testing."]
new_embeddings = [get_embedding(text) for text in new_texts]

# 新しいデータの挿入
collection.insert([new_texts, new_embeddings])

参考

  • milvus - GitHub


milvus Share Tweet