Operator GeometriCompatible with Milvus 2.6.4+
Milvus mendukung seperangkat operator untuk pemfilteran spasial pada bidang GEOMETRY, yang sangat penting untuk mengelola dan menganalisis data geometri. Operator-operator ini memungkinkan Anda untuk mengambil entitas berdasarkan hubungan geometri antar objek.
Semua operator geometri berfungsi dengan mengambil dua argumen geometri: nama bidang GEOMETRY yang ditentukan dalam skema koleksi Anda dan objek geometri target yang direpresentasikan dalam format Well-Known Text (WKT).
Menggunakan sintaks
Untuk memfilter pada bidang GEOMETRY, gunakan operator geometri dalam sebuah ekspresi:
Umum:
{operator}(geo_field, '{wkt}')Berbasis jarak:
ST_DWITHIN(geo_field, '{wkt}', distance)
Di mana
operatoradalah salah satu operator geometri yang didukung (misalnya,ST_CONTAINS,ST_INTERSECTS). Nama operator harus menggunakan huruf besar atau huruf kecil. Untuk daftar operator yang didukung, lihat Operator geometri yang didukung.geo_fieldadalah nama bidangGEOMETRYAnda.'{wkt}'adalah representasi WKT dari geometri yang akan ditanyakan.distanceadalah ambang batas khusus untukST_DWITHIN.
Untuk mempelajari lebih lanjut tentang bidang GEOMETRY di Milvus, lihat Bidang Geometri.
Operator geometri yang didukung
Tabel berikut mencantumkan operator geometri yang tersedia di Milvus.
Nama operator harus menggunakan huruf besar atau huruf kecil. Jangan mencampur huruf besar dan kecil dalam nama operator yang sama.
Operator |
Deskripsi |
Contoh |
|---|---|---|
|
Mengembalikan TRUE jika dua geometri identik secara spasial, yang berarti mereka memiliki kumpulan titik dan dimensi yang sama. |
Apakah dua geometri (A dan B) sama persis dalam ruang? |
|
Mengembalikan nilai TRUE jika geometri A sepenuhnya berisi geometri B, dengan interiornya memiliki setidaknya satu titik yang sama. |
Apakah sebuah batas kota (A) berisi sebuah taman tertentu (B)? |
|
Mengembalikan nilai TRUE jika geometri A dan B berpotongan sebagian tetapi tidak sepenuhnya berisi satu sama lain. |
Apakah dua jalan (A dan B) berpotongan di sebuah persimpangan? |
|
Mengembalikan nilai TRUE jika geometri A dan B memiliki setidaknya satu titik yang sama. Ini adalah kueri spasial yang paling umum dan banyak digunakan. |
Apakah area pencarian (A) bersinggungan dengan salah satu lokasi toko (B)? |
|
Mengembalikan TRUE jika geometri A dan B memiliki dimensi yang sama, tumpang tindih sebagian, dan tidak ada yang sepenuhnya berisi satu sama lain. |
Apakah dua bidang tanah (A dan B) tumpang tindih? |
|
Mengembalikan nilai TRUE jika geometri A dan B memiliki batas yang sama namun interiornya tidak berpotongan. |
Apakah dua properti yang bertetangga (A dan B) memiliki batas yang sama? |
|
Mengembalikan nilai TRUE jika geometri A sepenuhnya berada di dalam geometri B, dengan interiornya memiliki setidaknya satu titik yang sama. Ini adalah kebalikan dari |
Apakah sebuah titik tertentu (A) berada dalam radius pencarian yang ditentukan (B)? |
|
Mengembalikan TRUE jika jarak antara geometri A dan geometri B kurang dari atau sama dengan jarak yang ditentukan. Catatan: Geometri B saat ini hanya mendukung titik. Satuan jarak adalah meter. |
Temukan semua titik dalam jarak 5000 meter dari titik tertentu (B). |
ST_SAMA / st_equals
Operator ST_EQUALS mengembalikan TRUE jika dua geometri identik secara spasial, yang berarti mereka memiliki set titik dan dimensi yang sama. Hal ini berguna untuk memverifikasi apakah dua objek geometri yang disimpan mewakili lokasi dan bentuk yang sama.
Contoh
Misalkan Anda ingin memeriksa apakah geometri yang tersimpan (seperti titik atau poligon) sama persis dengan geometri target. Sebagai contoh, Anda dapat membandingkan titik yang tersimpan dengan titik yang diinginkan.
# The filter expression to check if a geometry matches a specific point
filter = "ST_EQUALS(geo_field, 'POINT(10 20)')"
ST_CONTAINS / st_contains
Operator ST_CONTAINS mengembalikan TRUE jika geometri pertama benar-benar berisi geometri kedua. Hal ini berguna untuk menemukan titik di dalam poligon, atau poligon yang lebih kecil di dalam poligon yang lebih besar.
Contoh
Bayangkan Anda memiliki koleksi distrik kota dan ingin menemukan tempat menarik tertentu, seperti restoran, yang berada di dalam batas-batas distrik tertentu.
# The filter expression to find geometries completely within a specific polygon.
filter = "ST_CONTAINS(geo_field, 'POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))')"
ST_CROSSES / st_crosses
Operator ST_CROSSES mengembalikan TRUE jika perpotongan dua geometri membentuk geometri dengan dimensi yang lebih rendah dari geometri aslinya. Hal ini biasanya berlaku pada sebuah garis yang melintasi sebuah poligon atau garis lain.
Contoh
Anda ingin menemukan semua jalur pendakian (string garis) yang melintasi garis batas tertentu (string garis lain) atau memasuki area yang dilindungi (poligon).
# The filter expression to find geometries that cross a line string.
filter = "ST_CROSSES(geo_field, 'LINESTRING(5 0, 5 10)')"
ST_INTERSECTS / st_intersects
Operator ST_INTERSECTS mengembalikan TRUE jika dua geometri memiliki titik batas atau interior yang sama. Ini adalah operator tujuan umum untuk mendeteksi segala bentuk tumpang tindih spasial.
Contoh
Jika Anda memiliki koleksi jalan dan ingin menemukan semua jalan yang melintasi atau menyentuh string garis tertentu yang merepresentasikan jalan baru yang diusulkan, Anda dapat menggunakan ST_INTERSECTS.
# The filter expression to find geometries that intersect with a specific line string.
filter = "ST_INTERSECTS(geo_field, 'LINESTRING (1 1, 2 2)')"
ST_TINDIH / st_tumpang tindih
Operator ST_OVERLAPS mengembalikan TRUE jika dua geometri dengan dimensi yang sama memiliki perpotongan parsial, di mana perpotongan itu sendiri memiliki dimensi yang sama dengan geometri asli, tetapi tidak sama dengan salah satu dari mereka.
Contoh
Anda memiliki sekumpulan wilayah penjualan yang tumpang tindih dan ingin menemukan semua wilayah yang tumpang tindih secara parsial dengan zona penjualan baru yang diusulkan.
# The filter expression to find geometries that partially overlap with a polygon.
filter = "ST_OVERLAPS(geo_field, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))')"
ST_TOUCHES / st_touches
Operator ST_TOUCHES mengembalikan TRUE jika dua batas geometri bersentuhan, tetapi interiornya tidak bersinggungan. Hal ini berguna untuk mendeteksi kedekatan.
Contoh
Jika Anda memiliki peta bidang properti dan ingin menemukan semua bidang yang berbatasan langsung dengan taman umum tanpa adanya tumpang tindih.
# The filter expression to find geometries that only touch a line string at their boundaries.
filter = "ST_TOUCHES(geo_field, 'LINESTRING(0 0, 1 1)')"
ST_DALAM / st_within
Operator ST_WITHIN mengembalikan TRUE jika geometri pertama sepenuhnya berada di dalam interior atau pada batas geometri kedua. Ini adalah kebalikan dari ST_CONTAINS.
Contoh
Anda ingin menemukan semua area perumahan kecil yang terletak sepenuhnya di dalam area taman yang lebih besar.
# The filter expression to find geometries that are completely within a larger polygon.
filter = "ST_WITHIN(geo_field, 'POLYGON((110 38, 115 38, 115 42, 110 42, 110 38))')"
Untuk informasi lebih lanjut mengenai cara menggunakan bidang GEOMETRY, lihat Bidang Geometri.
ST_DWITHIN / st_dwithin
Operator ST_DWITHIN mengembalikan TRUE jika jarak antara geometri A dan geometri B kurang dari atau sama dengan nilai yang ditentukan (dalam meter). Saat ini, geometri B harus berupa sebuah titik.
Contoh
Misalkan Anda memiliki koleksi lokasi toko dan ingin menemukan semua toko dalam jarak 5.000 meter dari lokasi pelanggan tertentu.
# Find all stores within 5000 meters of the point (120 30)
filter = "ST_DWITHIN(geo_field, 'POINT(120 30)', 5000)"