객체 수준 쿼리: Get
객체 수준 쿼리: Get
검색 연산 없이 컬렉션의 객체를 그대로 가져오고 싶을 때 쓰는 것이 Get 쿼리예요. 객체 수준 질의 함수를 통틀어 Get이라 부르죠. 어떤 객체를 어떤 조건으로 가져올지 인자로 정하고, 반환할 프로퍼티를 명시해요.
본문
Get 질의는 대상 컬렉션을 반드시 지정해야 해요. GraphQL 호출에서는 가져올 프로퍼티를 명시적으로 적어야 하고, gRPC에서는 기본으로 모든 프로퍼티를 가져와요. 메타데이터 조회는 두 API 모두 선택 사항이에요.
Get에 담을 수 있는 인자는 이렇게 나뉘어요.
| 인자 | 설명 | 필수 |
|---|---|---|
| 컬렉션(클래스) | 조회 대상 객체 컬렉션 | 예 |
| 프로퍼티 | 가져올 프로퍼티 | GraphQL에서 예 |
| 크로스 레퍼런스 | 가져올 참조 | 아니오 |
| 메타데이터 | 추가 프로퍼티 | 아니오 |
| 조건부 필터 | 조회 대상을 걸러냄 | 아니오 |
| 검색 연산자 | 검색 전략 지정(예: nearText, hybrid, bm25) | 아니오 |
| 추가 연산자 | limit·offset·sort 등 | 아니오 |
| 테넌트 이름 | 멀티테넌시 컬렉션일 때 지정 | 멀티테넌시면 예 |
| 일관성(consistency) 수준 | 일관성 지정 | 아니오 |
가장 단순한 형태는 인자 없이 객체를 조회하는 거예요. 인자를 주지 않으면 객체는 ID 순서로 반환되므로, 구조적인 조회 전략으로는 적합하지 않아요. 커서 API(after)로 순차 조회하는 편을 고려해 보세요.
import weaviate
import weaviate.classes as wvc
import os
client = weaviate.connect_to_local()
try:
collection = client.collections.use("JeopardyQuestion")
response = collection.query.fetch_objects()
for o in response.objects:
print(o.properties) # Inspect returned objects
finally:
client.close()
대응하는 GraphQL 질의는 이렇게 생겼어요.
{
Get {
JeopardyQuestion {
question
answer
points
}
}
}
groupBy를 쓰면 질의에 맞는 객체를 그룹으로 묶어 가져올 수 있어요. 다만 groupBy는 near<Media> 연산자에서만 동작하고, path는 프로퍼티 하나 또는 크로스 레퍼런스 하나로 제한되며 중첩 경로는 지원하지 않아요.
복제(replication)를 켠 환경에서는 consistencyLevel을 지정할 수 있는데, ONE, QUORUM(기본), ALL이 있어요. 멀티테넌시 컬렉션이라면 각 Get 질의에 테넌트를 반드시 지정해야 해요.
크로스 레퍼런스는 객체 사이의 참조로, 프로퍼티처럼 동작해요. Get 질의로 참조된 프로퍼티를 함께 가져올 수 있죠. 다만 참조가 들어간 질의는 규모가 커질수록 느려질 수 있어서, 가능하면 스키마에서 크로스 레퍼런스를 피하고 저자 정보처럼 관련 정보를 객체 안에 직접 넣는 편이 좋아요.
_additional 안에서는 다양한 메타데이터 프로퍼티를 함께 받을 수 있어요. id, vector, creationTimeUnix, lastUpdateTimeUnix, distance(벡터 검색 전용), certainty(벡터 검색 전용), score(BM25·하이브리드 전용), explainScore(BM25·하이브리드 전용) 등이 대표적이에요.