부울 표현식 규칙
이 장에서는 쿼리 조건 표현식을 작성하는 방법을 소개합니다.
개요
술어 표현식은 부울 값을 출력합니다. Milvus는 술어를 사용하여 스칼라 값을 필터링합니다. 술어 표현식을 평가할 때 TRUE 또는 FALSE를 반환합니다. 술어 표현식 사용에 대한 안내는 Python SDK API 참조를 참고하십시오.
연산자
논리 연산자
논리 연산자는 두 표현식을 비교합니다.
기호 | 연산 | 예제 | 설명 |
---|---|---|---|
'and' && | AND | expr1 && expr2 | expr1과 expr2가 모두 true일 때 True를 반환합니다. |
'or' || | OR | expr1 || expr2 | expr1 또는 expr2 중 하나가 true이면 True를 반환합니다. |
이진 산술 연산자
이진 산술 연산자는 두 피연산자를 취하여 기본 산술 연산을 수행한 다음 해당 결과를 반환합니다.
기호 | 연산 | 예제 | 설명 |
---|---|---|---|
+ | 덧셈 | a + b | 두 피연산자를 더합니다. |
- | 뺄셈 | a - b | 두 번째 피연산자를 첫 번째 피연산자에서 빼줍니다. |
* | 곱셈 | a * b | 두 피연산자를 곱합니다. |
/ | 나눗셈 | a / b | 첫 번째 피연산자를 두 번째 피연산자로 나눕니다. |
** | 지수 | a ** b | 첫 번째 피연산자를 두 번째 피연산자의 거듭제곱으로 올립니다. |
% | 나머지 | a % b | 첫 번째 피연산자를 두 번째 피연산자로 나눈 후 나머지를 반환합니다. |
관계 연산자
관계 연산자는 두 표현식 사이의 동등성, 부등식 또는 상대 순서를 확인하기 위해 기호를 사용합니다.
기호 | 연산 | 예제 | 설명 |
---|---|---|---|
< | 미만 | a < b | a가 b보다 작으면 True를 반환합니다. |
> | 초과 | a > b | a가 b보다 크면 True를 반환합니다. |
== | 같음 | a == b | a가 b와 같으면 True를 반환합니다. |
!= | 같지 않음 | a != b | a가 b와 다르면 True를 반환합니다. |
<= | 이하 | a <= b | a가 b보다 작거나 같으면 True를 반환합니다. |
>= | 이상 | a >= b | a가 b보다 크거나 같으면 True를 반환합니다. |
연산자 우선순위 및 결합성
다음 표는 연산자의 우선순위와 결합성을 나열합니다. 연산자는 우선순위가 높은 순서부터 낮은 순서로 나열됩니다.
우선순위 | 연산자 | 설명 | 결합성 |
---|---|---|---|
1 | + - | 단항 산술 연산자 | 좌측에서 우측으로 |
2 | not | 단항 논리 연산자 | 우측에서 좌측으로 |
3 | ** | 이항 산술 연산자 | 좌측에서 우측으로 |
4 | * / % | 이항 산술 연산자 | 좌측에서 우측으로 |
5 | + - | 이항 산술 연산자 | 좌측에서 우측으로 |
6 | < <= > >= | 비교 연산자 | 좌측에서 우측으로 |
7 | == != | 비교 연산자 | 좌측에서 우측으로 |
8 | like LIKE | 일치 연산자 | 좌측에서 우측으로 |
9 | json_contains JSON_CONTAINS | Json 배열 연산자 | 좌측에서 우측으로 |
10 | json_contains_all JSON_CONTAINS_ALL | Json 배열 연산자 | 좌측에서 우측으로 |
11 | json_contains_any JSON_CONTAINS_ANY | Json 배열 연산자 | 좌측에서 우측으로 |
12 | && and | 이항 논리 연산자 | 좌측에서 우측으로 |
13 | || or | 이항 논리 연산자 | 좌측에서 우측으로 |
표현식은 일반적으로 좌측에서 우측으로 평가됩니다. 복잡한 표현식은 한 번에 하나씩 평가됩니다. 표현식의 평가 순서는 사용된 연산자의 우선순위에 의해 결정됩니다.
표현식에 우선순위가 동일한 두 개 이상의 연산자가 포함된 경우, 좌측에 있는 연산자가 먼저 평가됩니다.
예를 들어, 10 / 2 * 5는 (10 / 2)로 평가되고 결과가 5와 곱해집니다.
낮은 우선순위 연산을 우선시해야 하는 경우, 해당 연산은 괄호로 묶어야 합니다.
예를 들어, 30 / 2 + 8. 보통 30을 2로 나눈 후 8을 결과에 더합니다. 2 + 8로 나누려면 30 / (2 + 8)로 작성해야 합니다.
괄호를 표현식 내에서 중첩할 수 있습니다. 가장 안쪽 괄호가 먼저 평가됩니다.
예제 조건
다음은 Milvus에서 사용 가능한 모든 부울 표현식에 대한 예제입니다 (int64
는 INT64 형식 데이터를 포함하는 스칼라 필드를 나타내며, float
는 부동 소수점 형식 데이터를 포함하는 스칼라 필드를 나타내며, VARCHAR
는 VARCHAR 형식 데이터를 포함하는 스칼라 필드를 나타냅니다):
- 비교 표현식
"int64 > 0"
"0 < int64 < 400"
"500 < int64"
VARCHAR > "str1"
- 논리 연산 및 괄호
"(int64 > 0 && int64 < 400) or (int64 > 500 && int64 < 1000)"
- in 표현식
Milvus는 명시적으로 정의된 주 키를 가진 엔티티만 삭제를 지원하며, 이는 in
용어 표현을 통해서만 달성할 수 있습니다.
"int64 not in [1, 2, 3]"
VARCHAR not in ["str1", "str2"]
- TermExpr, BinaryLogicalOp 및 CmpOp (다른 필드에 대해)
"int64 in [1, 2, 3] and float != 2"
- BinaryLogicalOp 및 CmpOp
"int64 == 0 || int64 == 1 || int64 == 2"
- CmpOp 및 UnaryArithOp 또는 BinaryArithOp
"200+300 < int64"
- MatchOp (접두어 일치)
VARCHAR like "prefix%"
- JsonArrayOp
-
JSON_CONTAINS(identifier, JsonExpr)
JSON_CONTAINS
(두 번째 매개변수) 문의 JSON 표현식이 목록인 경우 식별자 (첫 번째 매개변수)는 목록의 목록이어야 합니다. 그렇지 않으면 문은 항상 False로 평가됩니다.
json_contains(x, 1) # ==> true
json_contains(x, "a") # ==> false
json_contains(x, [1,2,3]) # ==> true
json_contains(x, [3,2,1]) # ==> false
-
JSON_CONTAINS_ALL(identifier, JsonExpr)
JSON_CONTAINS_ALL
문의 JSON 표현식은 항상 목록이어야 합니다.
json_contains_all(x, [1,2,8]) # ==> true
json_contains_all(x, [4,5,6]) # ==> false (6은 존재하지 않음)
-
JSON_CONTAINS_ANY(identifier, JsonExpr)
JSON_CONTAINS_ANY
문의 JSON 표현식은 항상 목록이어야 합니다. 그렇지 않으면 그 동작은JSON_CONTAINS
와 같습니다.
json_contains_any(x, [1,2,8]) # ==> true
json_contains_any(x, [4,5,6]) # ==> true
json_contains_any(x, [6,9]) # ==> false