幾何運算符號Compatible with Milvus 2.6.4+

Milvus 支援一組運算元,用於GEOMETRY 欄位的空間篩選,對於管理和分析幾何資料非常重要。這些運算符允許您根據物件之間的幾何關係檢索實體。

所有幾何運算符號的功能都是由兩個幾何參數組成:在您的集合模式中定義的GEOMETRY 欄位名稱,以及以Well-Known Text(WKT) 格式表示的目標幾何物件。

使用語法

若要對GEOMETRY 欄位進行篩選,請在表達式中使用幾何運算符:

  • 一般:{operator}(geo_field, '{wkt}')

  • 基於距離:ST_DWITHIN(geo_field, '{wkt}', distance)

其中:

  • operator 是支援的幾何運算符號之一 (例如ST_CONTAINS,ST_INTERSECTS)。運算符號名稱必須全大楷或全小楷。如需支援的運算符號清單,請參閱支援的幾何運算符號

  • geo_fieldGEOMETRY 欄位的名稱。

  • '{wkt}' 是要查詢的幾何的 WKT 表示。

  • distance 是專為ST_DWITHIN 設定的臨界值。

要瞭解更多關於 Milvus 中GEOMETRY 欄位的資訊,請參閱幾何欄位。

支援的幾何運算符號

下表列出 Milvus 中可用的幾何運算符號。

操作符名稱必須全大楷 或全小楷。請勿在相同的操作符名稱中混合大小寫。

運算符號

說明

範例

ST_EQUALS(A, B) /st_equals(A, B)

如果兩個幾何圖形在空間上完全相同,表示它們具有相同的點集和尺寸,則返回 TRUE。

兩個幾何圖形 (A 和 B) 在空間上是否完全相同?

ST_CONTAINS(A, B) /st_contains(A, B)

如果幾何圖 A 完全包含幾何圖 B,且兩者內部至少有一個共同點,則回傳 TRUE。

城市邊界 (A) 是否包含特定公園 (B)?

ST_CROSSES(A, B) /st_crosses(A, B)

如果幾何圖 A 和 B 部分相交,但不完全包含對方,則傳回值為 TRUE。

兩條道路 (A 和 B) 是否交叉?

ST_INTERSECTS(A, B) /st_intersects(A, B)

如果幾何圖 A 和 B 至少有一個共同點,則傳回值為 TRUE。這是最廣泛使用的空間查詢。

搜尋區域 (A) 是否與任何商店位置 (B) 相交?

ST_OVERLAPS(A, B) /st_overlaps(A, B)

如果幾何圖 A 和 B 的尺寸相同、部分重疊且兩者都不完全包含對方,則傳回 TRUE。

兩個地塊 (A 和 B) 是否重疊?

ST_TOUCHES(A, B) /st_touches(A, B)

如果幾何圖 A 和 B 有共同邊界,但內部沒有相交,則回傳 TRUE。

兩個鄰近的屬性 (A 和 B) 是否共用邊界?

ST_WITHIN(A, B) /st_within(A, B)

如果幾何圖形 A 完全包含在幾何圖形 B 中,且它們的內部至少有一個共同點,則傳回值為 TRUE。這是ST_Contains(B, A) 的逆向。

特定興趣點 (A) 是否在定義的搜尋半徑 (B) 內?

ST_DWITHIN(A, B, distance) /st_dwithin(A, B, distance)

如果幾何圖 A 與幾何圖 B 之間的距離小於或等於指定的距離,則傳回 TRUE。

注意:目前幾何體 B 只支援點。距離單位為公尺。

尋找距離特定點 (B) 5000 公尺內的所有點。

ST_EQUALS / ST_equals

如果兩個幾何圖形在空間上相同,也就是擁有相同的點集和尺寸,ST_EQUALS 運算符號會回傳 TRUE。這對於驗證兩個儲存的幾何物件是否代表完全相同的位置和形狀非常有用。

範例

假設您要檢查儲存的幾何(如點或多邊形)是否與目標幾何完全相同。例如,您可以比較儲存的點與特定的興趣點。

# The filter expression to check if a geometry matches a specific point
filter = "ST_EQUALS(geo_field, 'POINT(10 20)')"

ST_CONTAINS / st_contains

如果第一個幾何圖形完全包含第二個幾何圖形,ST_CONTAINS 運算符號會返回 TRUE。這對於尋找多邊形中的點或大多邊形中的小多邊形很有用。

範例

假設您有一個城市區域的集合,並且想要尋找一個特定的興趣點,例如一家餐廳,它位於指定區域的邊界內。

# 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

如果兩個幾何形狀的交點形成一個尺寸比原始幾何形狀低的幾何形狀,ST_CROSSES 運算符號會返回TRUE 。這通常適用於與多邊形或另一條線相交的線。

範例

您想要尋找所有跨越特定邊界線(另一條線串)或進入保護區域(多邊形)的遠足路徑(線串)。

# 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

如果兩個幾何圖形的邊界或內部有任何一點是共通的,ST_INTERSECTS 運算符號會返回TRUE 。這是偵測任何形式空間重疊的通用運算子。

範例

如果您有一個道路集合,想要找出所有與代表建議中的新道路的特定線串交叉或接觸的道路,您可以使用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_OVERLAPS / st_overlaps

如果兩個尺寸相同的幾何圖有部分相交,ST_OVERLAPS 運算符號會返回TRUE ,其中相交本身的尺寸與原始幾何圖相同,但不等於其中任何一個。

範例

您有一組重疊的銷售區域,想要找出所有與新建議的銷售區域部分重疊的區域。

# 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

如果兩個幾何圖形的邊界相觸,但內部沒有相交,ST_TOUCHES 運算符號會返回TRUE 。這對於偵測鄰接非常有用。

範例

如果您有一張地塊地圖,想要找出所有直接鄰接公園而沒有重疊的地塊。

# 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_WITHIN / ST_within

如果第一個幾何完全在第二個幾何的內部或邊界上,ST_WITHIN 運算符號會返回TRUE 。它是ST_CONTAINS 的逆運算。

範例

您想找出所有完全位於較大的指定公園區域內的小型住宅區。

# 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))')"

有關如何使用GEOMETRY 欄位的詳細資訊,請參考幾何欄位

ST_DWITHIN / ST_D WITHIN

如果幾何圖 A 與幾何圖 B 之間的距離小於或等於指定值(以公尺為單位),ST_DWITHIN 運算符號會返回TRUE 。目前,幾何體 B 必須是一個點。

範例

假設您有一個商店位置集合,想要找出距離特定客戶位置 5,000 公尺內的所有商店。

# Find all stores within 5000 meters of the point (120 30)
filter = "ST_DWITHIN(geo_field, 'POINT(120 30)', 5000)"