문서
필터 연산자
버킷 검색 메타데이터 필터를 위한 SQL 스타일 연산자 — eq, ne, like, prefix, in, gt/gte/lt/lte, exists.
버킷 검색은 메타데이터로 결과를 좁히는 filter 객체를 받습니다. 평범한 스칼라 값은 정확 일치(하위 호환)이며, 객체 형태로 감싸면 풍부한 술어를 표현할 수 있습니다.
연산자
| 연산자 | 타입 | 예시 | 설명 |
|---|---|---|---|
eq | any | {"eq": "urgent"} | 정확 일치. 엔진 fast path로 lower. |
ne | any | {"ne": "draft"} | 불일치. Post-filter. |
like | string | {"like": "%legal%"} | SQL LIKE: %=임의 문자, _=한 글자, \% / \_=리터럴. 대소문자 무시. |
prefix | string | {"prefix": "2024-"} | 시작 문자열. 대소문자 무시. |
in | array | {"in": ["a","b","c"]} | 리스트 멤버십. 최대 100개. |
gt / gte | number / ISO date | {"gte": 0.8} | 큼(이상). 숫자 우선, ISO date 문자열 fallback. |
lt / lte | number / ISO date | {"lt": 100} | 작음(이하). |
exists | boolean | {"exists": true} | true=필드 존재+비어있지 않음, false=없음. |
예시
bashcurl -X POST https://api.schift.io/v1/buckets/{bucket_id}/search \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "소방시설 점검 주기",
"top_k": 10,
"min_score": 0.6,
"filter": {
"tag": "urgent",
"source_url": {"like": "%fire-safety%"},
"filename": {"prefix": "2024-"},
"doc_type": {"in": ["policy", "spec"]},
"score": {"gte": 0.8},
"stage": {"ne": "draft"},
"author": {"exists": true}
}
}'필터는 AND로 결합됩니다
최상위 연산자 절은 모두 일치해야 합니다. 같은 키 안에서 OR은 in, 키 간 OR은 아래 $or을 사용하세요.
키 간 OR (`$or`)
서로 다른 메타데이터 키에 대한 OR이 필요하면 $or을 사용합니다. 각 arm은 완전한 sub-filter 딕셔너리이며 모든 연산자를 지원합니다.
json{
"filter": {
"doc_type": "policy",
"$or": [
{"severity": "high"},
{"priority": {"in": ["P0", "P1"]}}
]
}
}위는 doc_type=policy AND (severity=high OR priority∈{P0,P1})로 매칭됩니다. 중첩 3단계까지, $or당 arm 16개 cap.
결과 랭킹
필터는 점수를 변경하지 않고 후보를 가지치기만 합니다. Post-filter 연산자가 있으면 엔진이 top_k * 3 후보를 가져와 shrinkage를 흡수한 뒤 top_k로 자릅니다.
min_score
최상위 min_score (0.0–1.0)는 rerank 이후 최종 점수가 임계값 미만인 hit을 제거합니다. 챗봇 파이프라인의 hallucination 방어선으로 유용합니다.
안전장치
패턴 길이 256자, wildcard 16개, in 리스트 100개 캡. 패턴은 anchored case-insensitive regex로 변환되며 모든 정규식 메타문자는 escape됩니다 — SQL injection surface 없음.