コントで学ぶ、高性能ベクトルデータベース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




【コントで学ぶ】彼女の下着は何色?で LiveKit を知る

はい、承知いたしました。ソフトウェアエンジニアの視点から、LiveKit がどのように役立つのか、導入方法、そしてサンプルコードの例を、コント形式で、わかりやすく丁寧にご説明しますね。登場人物佐藤 ソフトウェアエンジニア。最近、リアルタイムコミュニケーション機能の実装に頭を悩ませている。


「太陽光でタダ充電」を叶えるEVCCの仕組み:ソフトウェアエンジニアが解説する設定と互換性

ここでご紹介する evcc-io/evcc は、まさにその悩みを解決してくれる、ソフトウェアエンジニアから見て「これは使える!」と思える素晴らしいオープンソースプロジェクトです。evcc("Electric Vehicle Charge Controller"の略)は、電気自動車(EV)の充電を賢くコントロールするためのエネルギー管理システムです。


【爆速】autobrr/qui で実現する、qBittorrent 複数管理の極上体験

autobrr/qui を一言で表すなら、まさに「職人が注いだ、雑味のない生ビール」のようなツールです。余計なものを削ぎ落とし、必要な機能だけを最高速で提供してくれます。エンジニア的な視点で見ると、このツールがいかに洗練されているかが分かります。


冒険心をくすぐるFocalboard:自社運用型プロジェクト管理ツールの魅力

まるで、あなたのチームを救う「秘宝の地図」のような存在になるかもしれませんよ。Focalboard は、一言で言えば「自分だけの秘密基地」で作れる、高機能なプロジェクト管理ツールです。TrelloやNotion、Asanaのようなツールのオープンソース版で、自分たちのサーバーに設置して使うことができます。つまり、データの保管場所も、機能の拡張も、すべて自分たちの手の中にあるんです。まるで、自分たちだけの特別なギルドハウスを築き上げるような感覚ですね!


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

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


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

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


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

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


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

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


牛丼一筋の心意気で学ぶ、Go言語とgRPCによる高速RPC通信

一言でいうと、「Go言語でサクッとマイクロサービスを構築するための、うまい、早い、安いRPCフレームワーク」です。RPC(Remote Procedure Call)とは、ネットワーク越しに別々のプログラムの関数を呼び出す仕組みのこと。簡単に言えば、サーバーの機能(関数)を、クライアントからまるで自分のプログラム内の関数のように呼び出せるようにしてくれる技術です。


DockerとGoで実現!遠隔操作ブラウザ「ネコ」があなたの開発を変える

やあ、諸君! プロのソフトウェアエンジニアである君なら、きっと「もっと自由に、もっと安全に、ウェブの向こう側を覗き見たい」なんて考えたことがあるはずだ。まるでルパン三世がどんな厳重なセキュリティも掻い潜るようにね。今日紹介するのは、そんな君の願いを叶えるかもしれない、とびきりのツール「m1k1o/neko」、通称「ネコ」だ。