コントで学ぶ、高性能ベクトルデータベースMilvusの導入と活用法


コントで学ぶ、高性能ベクトルデータベースMilvusの導入と活用法

milvus-io/milvus

2025-09-15

今日のBBQの主役は、milvus-io/milvus、通称「ミルバス」!

「ミルバスって、なんか難しそう…」って思いましたか?

大丈夫!

BBQに例えれば、ミルバスは「最高の焼き加減を自動で見つけてくれるスマートBBQグリル」みたいなものなんです。

BBQで例えると、ミルバスは「大量の食材(データ)」の中から、「最高の焼き加減の肉(類似するデータ)」を、超高速で、しかも自動で探してくれる、そんなすごいやつなんです。

具体的には、こんな風に役立ちます!

似ている画像や動画を超高速で探す!

「このBBQの画像に似ている画像を全部見つけて!」って言われたら、ミルバスがサッと探してくれます。

まるで、「この肉と同じくらい美味しい肉、全部持ってきて!」って言った時に、最高の肉だけを持ってきてくれる、そんな感じです。

自然言語処理(NLP)で似た文章を探す!

「BBQのレシピ」に関する文章を大量に持っている時に、「最高のBBQソースのレシピ」に関する文章を、ミルバスが超高速で探してくれます。

まるで、「このBBQソースに似た、最高のソースのレシピを全部見つけて!」って言った時に、一瞬で探してくれる、そんな感じです。

ユーザーにおすすめ商品を提案する!

「このBBQセットを買ったお客さんにおすすめのBBQグッズは?」って聞かれたら、ミルバスが「このBBQセットと似ている、他のBBQセット」を見つけて、そこからおすすめを提案してくれます。

まるで、「このお客さんが好きそうなBBQグッズ、全部持ってきて!」って言われた時に、最高の組み合わせを提案してくれる、そんな感じです。

さあ、ミルバスという最高のBBQグリルを、あなたのBBQに導入してみましょう!

今回は、docker-composeという、BBQで言うところの「火起こしセット」を使って、ミルバスを動かしてみましょう。

まずは、以下の内容でdocker-compose.yamlファイルを作成します。

version: '3.5'
services:
  etcd:
    image: quay.io/coreos/etcd:v3.5.0
    command: etcd -listen-client-urls http://0.0.0.0:2379 -advertise-client-urls http://etcd:2379
    ports:
      - "2379:2379"
    restart: always
  minio:
    image: minio/minio:latest
    ports:
      - "9000:9000"
    command: minio server /data
    environment:
      MINIO_ACCESS_KEY: minioadmin
      MINIO_SECRET_KEY: minioadmin
    restart: always
  milvus:
    image: milvusdb/milvus:v2.2.0
    ports:
      - "19530:19530"
    environment:
      MINIO_ADDRESS: minio:9000
      ETCD_ADDRESS: etcd:2379
    restart: always

ターミナルで、先ほどのファイルがある場所で、以下のコマンドを実行します。

docker-compose up -d

このコマンドで、ミルバスが動き出します!

これで、あなたのPCの中に、最高のBBQグリル「ミルバス」が立ち上がりました!

あとは、Go言語を使って、このグリルにBBQの食材(データ)を入れて、最高の焼き加減(類似データ)を探してもらいましょう!

さあ、いよいよBBQパーティーの始まりです!

まずは、go.modファイルを作成して、ミルバスのGoクライアントをインストールします。

go mod init mybbq
go get github.com/milvus-io/milvus-sdk-go/v2

そして、以下のGo言語のコードを書いて、BBQパーティーを始めましょう!

このコードは、ミルバスにBBQのデータを入れて、その中から似たデータを探す例です。

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/milvus-io/milvus-sdk-go/v2/client"
	"github.com/milvus-io/milvus-sdk-go/v2/entity"
)

func main() {
	// 1. BBQグリル(ミルバス)に接続!
	c, err := client.NewClient(context.Background(), "localhost:19530")
	if err != nil {
		log.Fatal(err)
	}

	// 2. BBQのコレクション(肉のカテゴリ)を作成
	collectionName := "bbq_collection"
	
	// ベクトルデータのスキーマを定義
	schema := &entity.Collection{
		Name: collectionName,
		Fields: []*entity.Field{
			{
				Name:       "id",
				DataType:   entity.FieldTypeInt64,
				IsPrimaryKey: true,
				AutoID:     true,
			},
			{
				Name:       "bbq_name",
				DataType:   entity.FieldTypeVarChar,
				TypeParams: map[string]string{"max_length": "256"},
			},
			{
				Name:       "bbq_vector",
				DataType:   entity.FieldTypeFloatVector,
				TypeParams: map[string]string{"dim": "4"}, // ベクトルの次元
			},
		},
	}
	
	err = c.CreateCollection(context.Background(), schema, false)
	if err != nil {
		log.Fatal(err)
	}
	
	// 3. BBQの食材(データ)をグリル(ミルバス)に入れる
	data := []entity.Column{
		entity.NewColumnVarChar("bbq_name", []string{"焼肉", "串焼き", "海鮮焼き", "野菜焼き"}),
		entity.NewColumnFloatVector("bbq_vector", 4, [][]float32{{1.0, 2.0, 3.0, 4.0}, {1.1, 2.1, 3.1, 4.1}, {5.0, 6.0, 7.0, 8.0}, {9.0, 10.0, 11.0, 12.0}}),
	}
	
	_, err = c.Insert(context.Background(), collectionName, "", data...)
	if err != nil {
		log.Fatal(err)
	}
	
	// 4. グリルをロードする(BBQ開始!)
	err = c.LoadCollection(context.Background(), collectionName, false)
	if err != nil {
		log.Fatal(err)
	}
	
	// 5. 似た食材(データ)を探す!
	queryVector := []float32{1.1, 2.1, 3.1, 4.1} // 「串焼き」と似た食材を探す
	
	searchResult, err := c.Search(context.Background(), collectionName, []string{}, []string{}, []entity.Vector{{Dim: 4, Data: []float32{1.1, 2.1, 3.1, 4.1}}}, "bbq_vector", entity.L2, 2)
	if err != nil {
		log.Fatal(err)
	}
	
	// 結果を表示
	for _, sr := range searchResult {
		fmt.Printf("最も似ているBBQ食材は: %s (距離: %f)\n", sr.GetFields()[0].String(), sr.Distance)
	}
}

このコードを実行すると、

最も似ているBBQ食材は: 串焼き (距離: 0.000000)
最も似ているBBQ食材は: 焼肉 (距離: 0.040000)

こんな感じで、指定したベクトルに似ているデータを超高速で探してくれます!

これで、あなたもBBQマスター!じゃなかった、ミルバスエンジニア!

さあ、ミルバスを使って、最高のBBQ…じゃなかった、最高のシステムを開発してください!


milvus-io/milvus




NginxとGoで作る、お手軽ログイン機能

一言で言うと、Webアプリケーションに手軽にログイン画面を追加するためのツールです。通常、Webアプリをパスワードで保護しようとすると、ユーザー管理やセッション管理など、色々な処理を自分で実装する必要があります。これは結構な手間ですし、セキュリティを考慮すると慎重な設計が求められます。


ソフトウェアエンジニア必見!Cobraで実現するプロ級Go CLIツール

「コマンドの解析が面倒だ…」 「ヘルプメッセージをいちいち書くのが大変…」 「サブコマンドをうまく管理できない…」もう大丈夫です!そんな悩みとは今日でサヨナラ。 今回は、あなたの開発を劇的にラクにする、魔法のツール「Cobra」をご紹介します!


【ゼロトラスト入門】NetBird×WireGuardで作る、鉄壁のプライベートネットワーク構築術

今日は、我々のパトロールエリア(ネットワーク)の安全を劇的に高め、かつ署員同士の通信を円滑にする強力な装備、「NetBird」について訓示を行う。最近のネットワーク境界は、昔のような「高い塀を作れば安心」という時代ではない。現場の署員(デバイス)がどこにいても、まるで同じ署内にいるかのように安全に繋がる必要がある。


メディアサーバーの決定版!bluenviron/mediamtxで君のプロジェクトにモジョを注入!

オースティン・パワーズだぜ!今回は君たちソフトウェアエンジニアの悩みを解決する、とびっきりクールなツールを紹介するぜ!その名も「bluenviron/mediamtx」!君たちのプロジェクトに、こう、なんていうか…「映像と音声のセクシーな魔法」をかけることができるんだ!この「mediamtx」は、まるで僕のモジョみたいに、あらゆる種類のメディアストリームを自由自在に操れる、まさに究極のメディアサーバー&プロキシなんだ!


Dockerだけじゃない!Moby Projectで自作コンテナ環境を構築する

Moby Project ってのはな、一言で言うと「コンテナをベースにしたシステムを作るための、オープンソースのツールキット」だ。例えるなら、俺たちが事件現場で使う道具一式、例えば手錠とか懐中電灯とか、そういうのを全部まとめて提供してくれるようなもんだな。


GoとReactが火を吹くぜ!次世代AIペネトレーションテスト「Pentagi」導入ガイド

いいかい、こいつはただの自動化ツールじゃねぇ。「AIのエージェント」が自分で考えて、ハッキング(ペネトレーションテスト)を完結させちまうっていう、とんでもねぇシロモノだ。「すっとこどっこい!人間がポチポチやってる間に、仕事が終わっちまうぞ!」ってな。それじゃ、いってみよう!


妹が教える!エンジニアのためのOllama活用術

ねえねえ、最近流行りの「Ollama」って知ってる?お兄ちゃんの好きそうな、めちゃくちゃ便利なツールなんだよ!Ollamaはね、お兄ちゃんのパソコンで、いろんなAIモデルを簡単に動かせるようにしてくれるすごーいツールなんだ!今までだと、AIモデルを使おうと思ったら、いろいろ難しそうな設定をしなきゃいけなかったり、パソコンの性能が足りなかったりしたんだけど、Ollamaを使えば、そんな心配はほとんどいらなくなるんだって!


エンタープライズRAG基盤 WeKnora:Go言語で構築する、高速・高信頼なLLM知識検索フレームワークの解剖

今回は、中国の巨大テック企業Tencentが公開している、文書理解・検索・質問応答のためのLLM(大規模言語モデル)活用フレームワーク「Tencent/WeKnora」について見ていきましょう。「え、また新しいLLMフレームワーク?もうお腹いっぱいだよ


クレーンゲーム攻略にTelegraf!?データで掴む勝利の秘訣

MC(陽気な兄ちゃん風)「さあ、みんなー!今日は特別企画!巷で噂のUFOキャッチャー、その攻略法を伝授しちゃうぜ!」アシスタント(冷静な妹風)「でも兄さん、クレーンゲームって運じゃないですか?攻略法なんてあるんですか?」MC「フフフ…甘いな妹よ!確かに運の要素はある。だが、そこにはデータが隠されているのさ!そして、そのデータを捉えるための秘密兵器が…そう、influxdata/telegrafだ!」


GOWA参上!WhatsApp自動化で開発効率を爆上げだ!

悪の組織に立ち向かう戦隊ヒーローのように、私たちソフトウェアエンジニアも日夜、様々な課題と戦っています。その中でも「WhatsAppの自動化」は、多くの人が直面する難題の一つでした。しかし、GOWAという強力な味方が現れました!GOWAは、Go言語で開発されたWhatsApp REST APIです。簡単に言うと、あなたのプログラムからWhatsAppを操作できるようにするツールですね。これまでのWhatsApp自動化は、ブラウザを操作したり、非公式なライブラリを使ったりと、不安定なものが多かったんです。でもGOWAは、公式のWhatsApp Webマルチデバイス機能に対応しているので、安定性が格段に向上しました!