Milvus
Zilliz
Beranda
  • Panduan Pengguna
    • Indeks
  • Home
  • Docs
  • Panduan Pengguna

  • Indeks

  • Indeks Skalar

  • RTREE

RTREECompatible with Milvus 2.6.4+

Indeks RTREE adalah struktur data berbasis pohon yang mempercepat kueri pada bidang GEOMETRY di Milvus. Jika koleksi Anda menyimpan objek geometris seperti titik, garis, atau poligon dalam format Well-known text (WKT) dan Anda ingin mempercepat pemfilteran spasial, RTREE merupakan pilihan yang ideal.

Bagaimana cara kerjanya

Milvus menggunakan indeks RTREE untuk mengatur dan memfilter data geometri secara efisien, dengan mengikuti proses dua tahap:

Fase 1: Membangun indeks

  1. Membuat simpul daun: Untuk setiap objek geometri, hitung Minimum Bounding Rectangle (MBR), yaitu persegi panjang terkecil yang sepenuhnya berisi objek tersebut, dan simpan sebagai simpul daun.

  2. Kelompokkan ke dalam kotak yang lebih besar: Kelompokkan simpul daun yang berdekatan dan bungkus setiap kelompok dengan MBR baru, membentuk simpul internal. Sebagai contoh, kelompok B berisi D dan E; kelompok C berisi F dan G.

  3. Tambahkan simpul akar: Tambahkan simpul akar yang MBR-nya mencakup semua kelompok internal, sehingga menghasilkan struktur pohon yang seimbang.

How Retree Works Bagaimana Retree Bekerja

Tahap 2: Mempercepat kueri

  1. Bentuk MBR kueri: Hitung MBR untuk geometri kueri Anda.

  2. Pangkas cabang: Mulai dari akar, bandingkan MBR kueri dengan setiap simpul internal. Lewati semua cabang yang MBR-nya tidak bersinggungan dengan MBR kueri.

  3. Kumpulkan kandidat: Turun ke cabang-cabang yang berpotongan untuk mengumpulkan kandidat simpul daun.

  4. Pencocokan yang tepat: Untuk setiap kandidat, lakukan predikat spasial yang tepat untuk menentukan kecocokan yang benar.

Membuat indeks RTREE

Anda dapat membuat indeks RTREE pada bidang GEOMETRY yang didefinisikan dalam skema koleksi Anda.

from pymilvus import MilvusClient

client = MilvusClient(uri="http://localhost:19530") # Replace with your server address

# Assume you have defined a GEOMETRY field named "geo" in your collection schema

# Prepare index parameters
index_params = client.prepare_index_params()

# Add RTREE index on the "geo" field
index_params.add_index(
    field_name="geo",
    index_type="RTREE",      # Spatial index for GEOMETRY
    index_name="rtree_geo",  # Optional, name your index
    params={}                # No extra params needed
)

# Create the index on the collection
client.create_index(
    collection_name="geo_demo",
    index_params=index_params
)

Kueri dengan RTREE

Anda memfilter dengan operator geometri dalam ekspresi filter. Ketika sebuah RTREE ada pada bidang GEOMETRY target, Milvus menggunakannya untuk memangkas kandidat secara otomatis. Tanpa indeks, filter akan kembali ke pemindaian penuh.

Untuk daftar lengkap operator khusus geometri yang tersedia, lihat Operator Geometri.

Contoh 1: Filter saja

Menemukan semua objek geometri dalam poligon tertentu:

filter_expr = "ST_CONTAINS(geo, 'POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))')"

res = client.query(
    collection_name="geo_demo",
    filter=filter_expr,
    output_fields=["id", "geo"],
    limit=10
)
print(res)   # Expected: a list of rows where geo is entirely inside the polygon

Contoh 2: Pencarian vektor + filter spasial

Menemukan vektor terdekat yang juga memotong garis:

# Assume you've also created an index on "vec" and loaded the collection.
query_vec = [[0.1, 0.2, 0.3, 0.4, 0.5]]
filter_expr = "ST_INTERSECTS(geo, 'LINESTRING (1 1, 2 2)')"

hits = client.search(
    collection_name="geo_demo",
    data=query_vec,
    limit=5,
    filter=filter_expr,
    output_fields=["id", "geo"]
)
print(hits)  # Expected: top-k by vector similarity among rows whose geo intersects the line

Untuk informasi lebih lanjut mengenai cara menggunakan bidang GEOMETRY, lihat Bidang Geometri.

Menghapus indeks

Gunakan metode drop_index() untuk menghapus indeks yang ada dari koleksi.

  • Pada v2.6.3 atau yang lebih lama, Anda harus melepaskan koleksi sebelum menghapus indeks skalar.

  • Mulai v2.6.4 atau yang lebih baru, Anda dapat membuang indeks skalar secara langsung setelah indeks tersebut tidak lagi diperlukan-tidak perlu melepaskan koleksi terlebih dahulu.

client.drop_index(
    collection_name="geo_demo",   # Name of the collection
    index_name="rtree_geo" # Name of the index to drop
)

Coba Milvus yang Dikelola secara Gratis

Zilliz Cloud bebas masalah, didukung oleh Milvus dan 10x lebih cepat.

Mulai
Umpan balik

Apakah halaman ini bermanfaat?