Milvus
Zilliz
홈페이지
  • 사용자 가이드
  • Home
  • Docs
  • 사용자 가이드

  • 검색

  • 필터링

  • 지오메트리 연산자

기하학 연산자Compatible with Milvus 2.6.4+

Milvus는 기하학적 데이터를 관리하고 분석하는 데 필수적인 GEOMETRY 필드에서 공간 필터링을 위한 연산자 집합을 지원합니다. 이러한 연산자를 사용하면 개체 간의 기하학적 관계를 기반으로 엔티티를 검색할 수 있습니다.

모든 기하 도형 연산자는 컬렉션 스키마에 정의된 GEOMETRY 필드의 이름과 잘 알려진 텍스트 (WKT) 형식으로 표현된 대상 기하 도형 객체라는 두 가지 기하 도형 인수를 받아 작동합니다.

구문 사용

GEOMETRY 필드를 필터링하려면 표현식에 기하 도형 연산자를 사용합니다:

  • 일반: {operator}(geo_field, '{wkt}')

  • 거리 기반: ST_DWITHIN(geo_field, '{wkt}', distance)

Where:

  • operator 는 지원되는 기하 도형 연산자 중 하나입니다(예: ST_CONTAINS, ST_INTERSECTS). 연산자 이름은 모두 대문자 또는 모두 소문자여야 합니다. 지원되는 연산자 목록은 지원되는 지오메트리 연산자를 참조하십시오.

  • geo_fieldGEOMETRY 필드의 이름입니다.

  • '{wkt}' 는 쿼리할 지오메트리의 WKT 표현입니다.

  • distanceST_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_dwithin

ST_DWITHIN 연산자는 지오메트리 A와 지오메트리 B 사이의 거리가 지정된 값(미터)보다 작거나 같으면 TRUE 을 반환합니다. 현재 지오메트리 B는 점이어야 합니다.

예제

매장 위치 컬렉션이 있고 특정 고객의 위치에서 5,000미터 이내에 있는 모든 매장을 찾고자 한다고 가정해 보겠습니다.

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

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
피드백

이 페이지가 도움이 되었나요?