객체 집합의 V2 검색 조건
ObjectSet의 filter.where는 SearchJsonQueryV2로 조건을 지정합니다. 각 조건은 type으로 구분합니다. 속성을 대상으로 하는 조건은 field 문자열 또는 PropertyIdentifier 객체 중 하나를 제공하며 두 필드를 함께 지정하지 않습니다. field에는 속성 API 이름을 넣습니다.
논리 조건인 and, or, not은 하위 검색 조건을 받습니다. 비교값은 객체 속성값의 JSON 표현을 따릅니다.
비교, 배열과 논리 조합
| type | 의미 | 추가 필드 |
|---|---|---|
lt | 값 미만 | 필수 value: any |
lte | 값 이하 | 필수 value: any |
gt | 값 초과 | 필수 value: any |
gte | 값 이상 | 필수 value: any |
eq | 값과 같음 | 필수 value: any |
in | 주어진 값 중 하나와 같음 | 선택적 value: list<PropertyValue> |
contains | 배열에 값 포함 | 필수 value: any |
isNull | 속성의 null 여부 | 필수 value: boolean |
not | 하위 조건을 충족하지 않음 | 필수 value: SearchJsonQueryV2 |
and | 모든 하위 조건 충족 | 선택적 value: list<SearchJsonQueryV2> |
or | 하위 조건 중 하나 이상 충족 | 선택적 value: list<SearchJsonQueryV2> |
문자열의 eq와 in에서 전체 용어 일치를 사용하려면 Ontology Manager에서 해당 속성의 Selectable 설정을 켜야 합니다. in에 빈 값 배열을 제공하면 객체 집합의 모든 객체에 일치합니다. 일반적인 SQL의 빈 IN 목록과 같은 조건으로 바꾸어 해석하지 않습니다.
isNull의 값이 true이면 null인 객체를, false이면 null이 아닌 객체를 선택합니다.
{
"type": "and",
"value": [
{
"type": "gte",
"propertyIdentifier": {"type": "property", "apiName": "age"},
"value": 18
},
{
"type": "isNull",
"propertyIdentifier": {"type": "property", "apiName": "address"},
"value": false
}
]
}
문자열 조건
아래 조건은 모두 필수 문자열 value와 속성 선택 필드를 사용합니다.
| type | 일치 조건 | 추가 선택 필드 |
|---|---|---|
containsAllTerms | 공백으로 구분한 용어를 순서와 관계없이 모두 포함 | fuzzy: boolean |
containsAnyTerm | 공백으로 구분한 용어 중 하나 이상 포함 | fuzzy: boolean |
containsAllTermsInOrder | 모든 용어를 주어진 순서로 인접하여 포함 | 없음 |
containsAllTermsInOrderPrefixLastTerm | 모든 용어를 주어진 순서로 인접하여 포함하며 마지막 용어는 접두사 일치 허용 | 없음 |
wildcard | 와일드카드 패턴과 일치. 예: fo*o | 없음 |
regex | 정규식 패턴과 일치. 예: .*fo?o* | 없음 |
startsWith | containsAllTermsInOrderPrefixLastTerm의 사용 중단 권고 별칭(Deprecated) | 없음 |
containsAllTerms와 containsAnyTerm은 fuzzy: true로 근사 일치를 허용합니다. 용어 입력 예시는 foo bar입니다. startsWith는 이름이 의미를 오해하게 할 수 있으므로 새 요청에는 containsAllTermsInOrderPrefixLastTerm을 사용합니다. 기존 요청의 별칭은 이 동일한 조건으로 해석합니다.
정규식
regex는 분석기를 거치지 않은 텍스트 표현에 적용합니다. 지원 연산자는 다음과 같습니다.
| 연산자 | 의미 |
|---|---|
. | 임의 문자 한 개 |
? | 앞 문자를 0회 또는 1회 반복 |
+ | 앞 문자를 1회 이상 반복 |
* | 앞 문자를 0회 이상 반복 |
{2} | 앞 문자를 정확히 2회 반복 |
{2,} | 앞 문자를 최소 2회 반복 |
{2,4} | 앞 문자를 2회 이상 4회 이하 반복 |
| | OR |
() | 표현식을 그룹으로 묶어 하나의 문자처럼 취급 |
[abc] | a, b, c 중 한 문자 |
[a-c] | a부터 c까지의 문자 범위 |
[^abc] | a, b, c가 아닌 문자 |
" | 문자열 리터럴 그룹 |
\ | 이스케이프 |
\d, \D | 숫자 문자, 숫자가 아닌 문자 |
\s, \S | 공백 문자, 공백이 아닌 문자 |
\w, \W | 단어 문자, 단어 문자가 아닌 문자 |
대괄호 안의 -는 맨 앞에 있거나 역슬래시로 이스케이프하면 일반 문자이며, 그 외에는 범위를 만들 수 있습니다. ^는 대괄호 내용의 첫 문자일 때 집합을 부정하고 그 외에는 일반 문자입니다. JSON 문자열에 역슬래시를 넣을 때는 JSON 이스케이프도 적용합니다.
{
"type": "regex",
"propertyIdentifier": {"type": "property", "apiName": "code"},
"value": "\\d{2}"
}
상대 날짜 범위
relativeDateRange는 날짜 또는 시각 속성을 실행 시점에 상대적인 범위로 조회합니다. 경계는 실행 시점을 기준으로 계산하며 지정한 시간대의 자정으로 맞춥니다.
| 필드 | 자료형 | 필수 여부 | 의미 |
|---|---|---|---|
field 또는 propertyIdentifier | 속성 선택 | 둘 중 하나 | 조회할 속성 |
relativeStartTime | RelativeTime | 선택 | 시작 경계 포함 |
relativeEndTime | RelativeTime | 선택 | 끝 경계 제외 |
timeZoneId | string | 필수 | 자정 계산에 사용할 시간대 ID |
시간대 예시는 America/New_York, Europe/London, Etc/UTC입니다. RelativeTime은 type: relativePoint와 필수 integer value, 필수 timeUnit을 갖습니다. 단위는 DAY, WEEK, MONTH, YEAR입니다. 음수는 과거, 양수는 미래입니다. value: -7, timeUnit: DAY는 7일 전이며 value: 1, timeUnit: MONTH는 다음 달의 시작을 뜻합니다.
{
"type": "relativeDateRange",
"propertyIdentifier": {"type": "property", "apiName": "createdAt"},
"relativeStartTime": {"type": "relativePoint", "value": -7, "timeUnit": "DAY"},
"relativeEndTime": {"type": "relativePoint", "value": 0, "timeUnit": "DAY"},
"timeZoneId": "Etc/UTC"
}
분석된 텍스트의 interval 조건
interval은 분석기를 거친 텍스트에서 하위 규칙이 일치하는 구간을 찾습니다. 속성 선택과 필수 rule: IntervalQueryRule을 지정합니다. 규칙은 다음 다섯 형태를 재귀적으로 조합합니다.
| rule.type | 필드와 필수 여부 | 의미 |
|---|---|---|
allOf | 선택적 rules 목록, 선택적 integer maxGaps, 필수 boolean ordered | 모든 하위 규칙을 충족하는 구간 |
anyOf | 선택적 rules 목록 | 하위 규칙 중 하나 이상을 충족하는 구간 |
match | 필수 string query, 선택적 integer maxGaps, 필수 boolean ordered | 입력 용어가 있는 구간 |
prefixOnLastToken | 필수 string query | 용어 순서를 유지하며 마지막 용어만 접두사 일치, 나머지는 정확히 일치 |
fuzzy | 필수 string term, 선택적 integer fuzziness | 허용 편집 거리 안에서 비슷한 용어 일치 |
rules의 항목은 IntervalQueryRule입니다. allOf.maxGaps는 하위 규칙이 만든 구간 사이의 간격을, match.maxGaps는 용어 사이의 간격을 제한합니다. 생략하면 간격을 고려하지 않습니다. 예를 들어 quick brown fox에서 quick과 fox 사이에는 한 용어의 간격이 있습니다. ordered: true이면 일치하는 구간이나 용어의 순서를 유지해야 합니다.
fuzziness는 0, 1, 2 중 하나이며 기본값은 2입니다. 편집 한 번은 문자 삽입, 삭제, 치환 또는 인접한 두 문자의 순서 교환입니다.
{
"type": "interval",
"propertyIdentifier": {"type": "property", "apiName": "description"},
"rule": {"type": "match", "query": "quick fox", "maxGaps": 1, "ordered": true}
}
공간 조건
나머지 여덟 조건인 withinDistanceOf, withinBoundingBox, intersectsBoundingBox, doesNotIntersectBoundingBox, withinPolygon, intersectsPolygon, doesNotIntersectPolygon, geoShapeV2는 공간 필터의 좌표와 도형 계약을 사용합니다.