Milvus 2.6で地理空間フィルタリングとベクトル検索をジオメトリフィールドとRTREEに統合
AIシステムがリアルタイムの意思決定にますます適用されるにつれて、地理空間データは、特に物理的な世界で動作するアプリケーションや、実際の場所にまたがってユーザーにサービスを提供するアプリケーションにおいて、ますます重要になってきている。
DoorDashやUber Eatsのようなフードデリバリープラットフォームを考えてみよう。ユーザーが注文をするとき、システムは単純に2地点間の最短距離を計算しているわけではない。レストランの品質、宅配便の空き状況、交通状況、サービスエリア、そして最近では個人の嗜好を表すユーザーとアイテムの埋め込みを評価する。同様に、自律走行車は、しばしばミリ秒以内という厳しいレイテンシ制約のもとで、パスプランニング、障害物検知、シーンレベルの意味理解を実行しなければならない。これらの領域では、効果的な意思決定は、空間的制約を独立したステップとして扱うのではなく、意味的類似性と組み合わせることに依存する。
しかしデータレイヤーでは、空間データと意味データは従来別々のシステムで扱われてきた。
地理空間データベースと空間拡張は、座標、多角形、および包含や距離のような空間的関係を格納するように設計されている。
ベクトルデータベースは、データの意味的な意味を表すベクトル埋め込みを扱う。
アプリケーションが両方を必要とする場合、多くの場合、多段階のクエリパイプラインを強いられる。このような分離はシステムの複雑性を増し、クエリの待ち時間を増やし、空間的意味的推論を効率的に実行することを困難にしています。
Milvus2.6は、ベクトル類似性検索を空間制約と直接組み合わせることができるGeometry Fieldを導入することで、この問題に対処している。これにより、以下のようなユースケースが可能になる:
ロケーションベースサービス(LBS):"この街区内で類似のPOIを見つける"
マルチモーダル検索:"この地点から1km以内の類似写真を検索"
地図と物流:"地域内の資産 "や "経路と交差するルート"
Milvusは、空間フィルタリングに最適化されたツリーベースの構造である新しいRTREEインデックスと組み合わせることで、高次元ベクトル検索とともに、st_contains 、st_within 、st_dwithin のような効率的な地理空間演算子をサポートします。これらを組み合わせることで、空間を意識したインテリジェントな検索が可能になるだけでなく、実用的になる。
この記事では、Geometry FieldとRTREEインデックスがどのように機能するのか、また、ベクトル類似性検索とどのように組み合わせることで、実世界の空間意味的なアプリケーションを実現できるのかについて説明する。
Milvusにおけるジオメトリーフィールドとは?
ジオメトリーフィールドとは、Milvusのスキーマ定義データタイプ(DataType.GEOMETRY)の一つで、ジオメトリーデータを格納するために使用されます。座標のみを扱うシステムとは異なり、MilvusはPoint、LineString、Polygonなどの様々な空間構造をサポートしています。
これにより、レストランの場所(Point)、配達区域(Polygon)、自律走行車の軌跡(LineString)といった実世界の概念を、意味ベクトルを格納する同じデータベース内で表現することが可能になる。言い換えれば、Milvusは、何かがどこにあるのか、そしてそれが何を意味するのかを示す統一されたシステムとなる。
ジオメトリ値は、ジオメトリデータの挿入とクエリのための人間可読標準であるWell-Known Text (WKT)フォーマットを使用して保存される。WKT形式の文字列はMilvusのレコードに直接挿入することができるため、データのインジェストやクエリを簡素化することができます。例えば
data = [
{
"id": 1,
"geo": "POINT(116.4074 39.9042)",
"vector": vector,
}
]
RTREEインデックスとは?
MilvusがGeometryデータタイプを導入すると、空間オブジェクトをフィルタリングする効率的な方法が必要になります。Milvusは、2段階の空間フィルタリングパイプラインを使用してこれを処理します:
粗いフィルタリング:粗いフィルタリング:RTREEなどの空間インデックスを使用して、候補をすばやく絞り込みます。
細かいフィルタリング:残った候補に対して正確なジオメトリチェックを適用し、境界での正確性を確保します。
この設計では、パフォーマンスと精度のバランスをとっています。空間インデックスは無関係なデータを積極的に除去し、正確なジオメトリチェックは、包含、交差、距離しきい値などの演算子の正しい結果を保証します。
このパイプラインの中核となるのがRTREE(Rectangle Tree)で、幾何学データに対するクエリを高速化するために設計された空間インデックス構造です。RTREEは、最小境界矩形(MBR)を使用してオブジェクトを階層的に整理することで、クエリ実行時に検索空間の大部分をスキップできるようにします。
フェーズ1:RTREEインデックスの構築
RTREEの構築は、近傍の空間オブジェクトをより大きな境界領域にグループ化するボトムアッププロセスに従って行われます:
1.リーフノードを作成します:リーフノードの作成:各ジオメトリオブジェクトについて、最小境界矩形(MBR:Minimum Bounding Rectangle)(オブジェクトを完全に含む最小の矩形)を計算し、リーフノードとして格納します。
2.より大きなボックスにグループ化します:近くのリーフノードをクラスタ化し、各グループを新しい MBR 内にラップして内部ノードを生成します。
3.ルート・ノードを追加する:MBRがすべての内部グループをカバーするルートノードを作成し、高さバランスの取れたツリー構造を形成する。
フェーズ2:クエリの高速化
1.クエリMBRの形成:クエリで使用するジオメトリのMBRを計算する。
2.ブランチを刈り込む:ルートから始めて、クエリMBRと各内部ノードを比較します。MBR がクエリ MBR と交差しないブランチはスキップします。
3.候補を集める:交差する枝に降り、候補となる葉ノードを集める。
4.正確なマッチングの実行:各候補について、空間述語を実行して正確な結果を得ます。
RTREEが高速な理由
RTREEが空間フィルタリングで高い性能を発揮できるのは、いくつかの重要な設計上の特徴があるからです:
各ノードがMBRを格納:各ノードは、そのサブツリー内のすべてのジオメトリの面積を近似します。これにより、クエリ中にブランチを探索すべきかどうかを簡単に判断できます。
高速な枝刈り:MBRがクエリ領域と交差する部分木のみが探索されます。無関係な領域は完全に無視される。
データサイズに合わせて拡張可能:RTREEはO(log N)時間で空間検索をサポートするため、データセットが拡張しても高速なクエリが可能です。
Boost.Geometryの実装Milvusは、最適化されたジオメトリアルゴリズムと、並行処理に適したスレッドセーフなRTREE実装を提供する、広く使用されているC++ライブラリであるBoost.Geometryを使用してRTREEインデックスを構築します。
サポートされるジオメトリ演算子
Milvusは、幾何学的関係に基づいてエンティティのフィルタリングと取得を可能にする一連の空間演算子を提供します。これらの演算子は、オブジェクトが空間内で互いにどのように関連しているかを理解する必要があるワークロードに不可欠です。
以下の表は、Milvus で現在利用可能なジオメトリ演算子の一覧です。
| 演算子 | 説明 |
|---|---|
| st_intersects(A, B) | ジオメトリ A と B が少なくとも 1 つの共通点を持つ場合に TRUE を返します。 |
| st_contains(A, B) | ジオメトリ A がジオメトリ B を(境界を除いて)完全に含む場合に TRUE を返します。 |
| st_within(A, B) | これは st_contains(A, B) の逆です。 |
| st_covers(A, B) | 形状 A が(境界を含む)形状 B を覆っている場合に TRUE を返します。 |
| st_touches(A, B) | 形状 A と B が境界で接触しているが、内部では交差していない場合に TRUE を返す。 |
| st_equals(A, B) | ジオメトリ A と B が空間的に同一である場合に TRUE を返す。 |
| st_overlaps(A, B) | ジオメトリ A と B が部分的に重なり、どちらも他方を完全に含まない場合に TRUE を返す。 |
| st_dwithin(A, B, d) | A と B の距離がd より小さい場合に TRUE を返す。 |
ジオロケーションインデックスとベクトルインデックスの組み合わせ方
GeometryサポートとRTREEインデックスにより、Milvusは地理空間フィルタリングとベクトル類似性検索を単一のワークフローで組み合わせることができます。このプロセスは2つのステップで行われます:
1.1.RTREEを使用した位置によるフィルタリング:Milvusはまず、RTREEインデックスを使用して、指定された地理的範囲内(例:「2km以内」)のエンティティに検索を絞り込みます。
2.ベクトル検索を使用したセマンティクスによるランク付け:残りの候補から、埋め込み類似度に基づき、ベクトルインデックスが上位N位までの最も類似した結果を選択する。
地理ベクトル検索の実際の使用例
1.配送サービス:よりスマートな、位置を考慮したレコメンデーション
DoorDashやUber Eatsのようなプラットフォームは、毎日何億ものリクエストを処理している。ユーザーがアプリを開いた瞬間に、システムはユーザーの位置情報、時間帯、味の好み、配達予定時間、リアルタイムの交通状況、宅配業者の空き状況に基づいて、今どのレストランや宅配業者がベストマッチかを判断しなければなりません。
従来は、地理空間データベースと別のレコメンデーション・エンジンを照会し、フィルタリングと再ランキングを何度も繰り返す必要があった。Milvus Geolocation Indexは、このワークフローを大幅に簡素化します:
統合ストレージ- レストランの座標、宅配便の場所、ユーザーの嗜好の埋め込みをすべて1つのシステムに保存。
共同検索- 最初に空間フィルタ(例えば、3キロメートル以内のレストラン)を適用し、次にベクトル検索を使用して類似性、味の好み、または品質でランク付けします。
ダイナミックな意思決定- リアルタイムの宅配便配車と交通信号を組み合わせ、最も近い最適な宅配便を迅速に割り当てます。
この統一されたアプローチにより、プラットフォームは1つのクエリで空間的推論と意味的推論を行うことができる。例えば、ユーザーが「カレーライス」と検索すると、milvusは意味的に関連するレストランを検索し、近くにあり、配達が早く、ユーザーの過去の味覚プロファイルに一致するレストランを優先する。
2.自律走行:よりインテリジェントな判断
自律走行では、地理空間インデクシングが知覚、位置特定、意思決定の基本となる。車両は高精細地図に絶えず位置合わせし、障害物を検知し、安全な軌道を計画しなければなりません。
Milvusでは、GeometryタイプとRTREEインデックスにより、以下のようなリッチな空間構造を保存し、クエリすることができます:
道路境界(LineString)
交通規制区域(ポリゴン)
検出された障害物(Point)
これらの構造を効率的にインデックス化することで、地理空間データをAIの意思決定ループに直接参加させることができます。例えば、自律走行車は、RTREEの空間述語を使用するだけで、現在の座標が特定の車線内にあるか、または制限区域と交差しているかを迅速に判断することができます。
Milvusは、知覚システムによって生成されたベクトル埋め込み(現在の運転環境をキャプチャするシーン埋め込みなど)と組み合わせることで、半径50メートル以内の現在の運転シナリオに類似した過去の運転シナリオを検索するなど、より高度なクエリをサポートすることができます。これにより、モデルはより速く環境を解釈し、より良い判断を下すことができます。
結論
ジオロケーションは緯度と経度以上のものである。ロケーションセンシティブなアプリケーションでは、イベントが発生する場所、エンティティが空間的にどのように関係するか、そしてそれらの関係がどのようにシステムの動作を形成するかについての重要なコンテキストを提供する。地理空間データを機械学習モデルからのセマンティック・シグナルと組み合わせることで、空間データとベクトルデータを別々に扱う場合には表現が難しかったり、実行効率が悪かったりする、より豊富な種類のクエリが可能になる。
GeometryフィールドとRTREEインデックスの導入により、Milvusはベクトル類似検索と空間フィルタリングを単一のクエリーエンジンに統合しました。これにより、アプリケーションはベクトル、地理空間データ、時間を横断した共同検索を実行できるようになり、空間を意識した推薦システム、マルチモーダルなロケーションベース検索、地域やパスに制約のある分析などのユースケースをサポートします。さらに重要なのは、専門システム間でデータを移動させる多段パイプラインを排除することで、アーキテクチャの複雑さを軽減することだ。
AIシステムが現実世界の意思決定に近づき続けるにつれ、どのようなコンテンツが関連性があるのかを理解することは、それが適用される場所や重要なタイミングと組み合わされることがますます必要になる。Milvusは、このような空間的意味論的ワークロードのためのビルディングブロックを、表現力と実用性を兼ね備えた方法で提供します。
Geometry FieldとRTREEインデックスの詳細については、以下のドキュメントをご参照ください:
Milvusの最新機能に関するご質問やディープダイブをご希望ですか?私たちの Discord チャンネルに参加するか、 GitHub に課題を提出してください。また、 Milvusオフィスアワーを通して、20分間の1対1のセッションを予約し、洞察やガイダンス、質問への回答を得ることもできます。
Milvus 2.6の機能についてもっと知る
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word



