Search API의 목적은 지정된 쿼리와 유사한 데이터 객체를 찾아 유사성별로 순위가 지정된 결과 목록을 반환하는 것입니다. 검색 API는 필터링도 지원합니다.
Search API는 벡터 검색, 전체 텍스트 검색, 시맨틱 검색 등 다양한 방법으로 데이터 객체를 검색할 수 있습니다. 또한 모든 유형의 여러 검색을 결합하여 하이브리드 검색을 구현할 수 있습니다.
벡터 검색
벡터 검색을 사용하면 자체 쿼리 벡터를 제공할 수 있습니다. embedding-config가 없는 임베딩 필드를 검색하는 데 필요한 메서드입니다.
vector_search 필드가 여러 개 제공되면 동일한 가중치를 사용하여 결과가 결합됩니다.
다음 예시에서는 ID가 COLLECTION_ID인 컬렉션에서 벡터 검색을 실행하는 방법을 보여줍니다.
REST
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- COLLECTION_ID: 컬렉션의 ID입니다.
- LOCATION: Agent Platform을 사용하는 리전입니다.
- PROJECT_ID: Cloud de Confiance by S3NS 프로젝트 ID
HTTP 메서드 및 URL:
POST https://vectorsearch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects:search
JSON 요청 본문:
{
"vector_search": {
"search_field": "plot_embedding",
"vector": {
"values": [
0.42426406871192845,
0.565685424949238,
0.7071067811865475
]
},
"filter": {
"genre": {
"$eq": "Thriller"
}
},
"top_k": 5,
"output_fields": {
"data_fields": "*",
"vector_fields": "*",
"metadata_fields": "*"
}
}
}
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
{
"results": [
{
"dataObject": {
"name": "projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects/1",
"createTime": "2026-01-31T20:05:06Z",
"updateTime": "2026-02-02T13:59:24Z",
"data": {
"year": 1991,
"title": "The Silence of the Lambs",
"director": "Jonathan Demme",
"genre": "Thriller"
},
"vectors": {
"plot_embedding": {
"dense": {
"values": [
1,
1,
1
]
}
},
"sparse_embedding": {
"sparse": {
"values": [
1,
6,
3,
2,
8,
5,
2
],
"indices": [
4065,
13326,
17377,
25918,
28105,
32683,
42998
]
}
},
"genre_embedding": {
"dense": {
"values": [
0.3863801,
0.73934346,
0.16189057,
0.5271367
]
}
},
"soundtrack_embedding": {
"dense": {
"values": [
0.5920452,
0.08301644,
0.12647335,
0.619643,
0.49258286
]
}
}
}
},
"distance": 1.697
},
{
"dataObject": {
"name": "projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects/2",
"createTime": "2026-02-04T14:35:29Z",
"updateTime": "2026-02-04T14:37:29Z",
"data": {
"year": 1995,
"title": "Se7en",
"director": "David Fincher",
"genre": "Thriller"
},
"vectors": {
"genre_embedding": {
"dense": {
"values": [
0.3863801,
0.73934346,
0.16189057,
0.5271367
]
}
},
"plot_embedding": {
"dense": {
"values": [
1,
1,
1
]
}
},
"sparse_embedding": {
"sparse": {
"values": [
1,
6,
3,
2,
8,
5,
2
],
"indices": [
4065,
13326,
17377,
25918,
28105,
32683,
42998
]
}
},
"soundtrack_embedding": {
"dense": {
"values": [
0.5920452,
0.08301644,
0.12647335,
0.619643,
0.49258286
]
}
}
}
},
"distance": 1.75
}
]
}
gcloud
아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.
-
SEARCH_VECTOR_FILE: 검색할 밀도 벡터 또는 희소 벡터가 포함된 JSON 파일의 로컬 경로입니다.
밀도 높은 벡터의 파일 콘텐츠 예:
{ "dense": { "values": [ 0.42426406871192845, 0.565685424949238, 0.7071067811865475 ] } }
희소 벡터의 파일 콘텐츠 예:
{ "sparse": { "indices": [1, 5, 10], "values": [0.1, 0.5, 0.21] } }
- COLLECTION_ID: 컬렉션의 ID입니다.
- LOCATION: Agent Platform을 사용하는 리전입니다.
- PROJECT_ID: Cloud de Confiance by S3NS 프로젝트 ID
다음 명령어를 실행합니다.
Linux, macOS 또는 Cloud Shell
gcloud vector-search collections data-objects search \ --vector-search-field="plot_embedding" \ --vector-from-file=SEARCH_VECTOR_FILE \ --json-filter='{"genre": {"$eq": "Thriller"}}' \ --top-k=5 \ --output-data-fields='*' \ --output-vector-fields='*' \ --output-metadata-fields='*' \ --collection=COLLECTION_ID \ --location=LOCATION \ --project=PROJECT_ID
Windows(PowerShell)
gcloud vector-search collections data-objects search ` --vector-search-field="plot_embedding" ` --vector-from-file=SEARCH_VECTOR_FILE ` --json-filter='{"genre": {"$eq": "Thriller"}}' ` --top-k=5 ` --output-data-fields='*' ` --output-vector-fields='*' ` --output-metadata-fields='*' ` --collection=COLLECTION_ID ` --location=LOCATION ` --project=PROJECT_ID
Windows(cmd.exe)
gcloud vector-search collections data-objects search ^ --vector-search-field="plot_embedding" ^ --vector-from-file=SEARCH_VECTOR_FILE ^ --json-filter='{"genre": {"$eq": "Thriller"}}' ^ --top-k=5 ^ --output-data-fields='*' ^ --output-vector-fields='*' ^ --output-metadata-fields='*' ^ --collection=COLLECTION_ID ^ --location=LOCATION ^ --project=PROJECT_ID
다음과 비슷한 응답이 표시됩니다.
---
dataObject:
createTime: '2026-01-31T20:05:06Z'
data:
director: Jonathan Demme
genre: Thriller
title: The Silence of the Lambs
year: 1991
name: projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects/1
updateTime: '2026-02-02T13:59:24Z'
vectors:
genre_embedding:
dense:
values:
- 0.38638
- 0.739343
- 0.161891
- 0.527137
plot_embedding:
dense:
values:
- 1.0
- 1.0
- 1.0
soundtrack_embedding:
dense:
values:
- 0.592045
- 0.0830164
- 0.126473
- 0.619643
- 0.492583
sparse_embedding:
sparse:
indices:
- 4065
- 13326
- 17377
- 25918
- 28105
- 32683
- 42998
values:
- 1.0
- 6.0
- 3.0
- 2.0
- 8.0
- 5.0
- 2.0
distance: 1.697
---
dataObject:
createTime: '2026-02-04T14:35:29Z'
data:
director: David Fincher
genre: Thriller
title: Se7en
year: 1995
name: projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects/2
updateTime: '2026-02-04T14:37:29Z'
vectors:
genre_embedding:
dense:
values:
- 0.38638
- 0.739343
- 0.161891
- 0.527137
plot_embedding:
dense:
values:
- 1.0
- 1.0
- 1.0
soundtrack_embedding:
dense:
values:
- 0.592045
- 0.0830164
- 0.126473
- 0.619643
- 0.492583
sparse_embedding:
sparse:
indices:
- 4065
- 13326
- 17377
- 25918
- 28105
- 32683
- 42998
values:
- 1.0
- 6.0
- 3.0
- 2.0
- 8.0
- 5.0
- 2.0
distance: 1.75
Python
from google.cloud import vectorsearch_v1
# Create the client
data_object_search_service_client = vectorsearch_v1.DataObjectSearchServiceClient()
# Initialize request
vector_search = vectorsearch_v1.VectorSearch(
search_field="plot_embedding",
vector={"values": [0.1, 0.2, 0.3]},
filter={"genre": {"$eq": "Thriller"}},
top_k=5,
)
request = vectorsearch_v1.SearchDataObjectsRequest(
parent="projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID",
vector_search=vector_search,
)
# Make the request
response = data_object_search_service_client.search_data_objects(request=request)
# Handle the response
print(response)
검색 정확도 및 성능 조정
100,000개가 넘는 임베딩이 있는 밀도 높은 ANN 색인에 대한 벡터 검색의 경우 에이전트 검색은 기본적으로 재현율과 지연 시간 간의 최적의 절충안을 제공하려고 시도합니다. 타겟 재현율을 지정하여 사용 사례에 맞게 이 균형을 조정할 수 있습니다.
값은 0.00 이상, 1.00 이하여야 합니다.
ANN 색인을 만드는 방법에 대한 자세한 내용은 ANN 색인 만들기를 참고하세요.
다음 예시에서는 타겟 재현율이 0.95인 밀도 높은 ANN 색인에서 벡터 검색을 실행하는 방법을 보여줍니다.
REST
HTTP 메서드 및 URL:
POST https://vectorsearch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects:search
JSON 요청 본문:
{
"vectorSearch": {
"searchField": "plot_embedding",
"vector": {
"values": [0.42426406871192845, 0.565685424949238, 0.7071067811865475]
},
"topK": 10,
"searchHint": {
"indexHint": {
"name": "projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/indexes/INDEX_ID",
"denseScannParams": {
"targetRecall": 0.95
}
}
},
"outputFields": {
"dataFields": "*",
"vectorFields": "*",
"metadataFields": "*"
}
}
}
gcloud
쿼리 벡터를 JSON 파일(예: vector.json)에 저장합니다.
{
"dense": {
"values": [0.42426406871192845, 0.565685424949238, 0.7071067811865475]
}
}
그런 다음
gcloud vector-search collections data-objects search
명령어를 실행합니다.
gcloud vector-search collections data-objects search \
--project=PROJECT_ID \
--location=LOCATION \
--collection=COLLECTION_ID \
--vector-search-field=plot_embedding \
--vector-from-file=vector.json \
--use-index=INDEX_ID \
--dense-scann-target-recall=0.95 \
--top-k=10
Python
from google.cloud import vectorsearch_v1
# Create the client
data_object_search_service_client = vectorsearch_v1.DataObjectSearchServiceClient()
collection = "projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID"
# Set the target recall rate on the index hint
search_hint = vectorsearch_v1.SearchHint(
index_hint=vectorsearch_v1.SearchHint.IndexHint(
name=f"{collection}/indexes/INDEX_ID",
dense_scann_params=vectorsearch_v1.SearchHint.IndexHint.DenseScannParams(
target_recall=0.95,
),
),
)
# Initialize request
vector_search = vectorsearch_v1.VectorSearch(
search_field="plot_embedding",
vector={"values": [0.42426406871192845, 0.565685424949238, 0.7071067811865475]},
top_k=10,
search_hint=search_hint,
output_fields=vectorsearch_v1.OutputFields(
data_fields=["*"],
vector_fields=["*"],
metadata_fields=["*"],
),
)
request = vectorsearch_v1.SearchDataObjectsRequest(
parent=collection,
vector_search=vector_search,
)
# Make the request
response = data_object_search_service_client.search_data_objects(request=request)
# Handle the response
print(response)
텍스트 검색
이렇게 하면 희소 벡터 없이 전체 텍스트 검색이 실행됩니다. 기본 '단어' 쿼리 언어는 전체 입력을 암시적 AND 연산자가 있는 개별 검색어로 취급합니다. enhanced_query를 true로 설정하여 검색어를 확장하고, 어간 추출, 불용어 삭제를 처리하고, 추가 검색 연산자를 허용할 수 있습니다.
OR: 지정된 검색어 중 하나 이상이 포함된 문서와 일치하는 대소문자를 구분하는 논리합 연산자입니다. 이는 인접한 두 검색어에만 적용됩니다.": 구문 검색을 위한 큰따옴표입니다.-: 부정 연산자입니다. 이 용어 앞에 배치된 용어가 포함된 문서는 제외됩니다.
고급 텍스트 검색
Agent Retrieval 텍스트 검색 API를 사용하면 하나 이상의 하위 쿼리가 포함된 구조화된 쿼리를 통해 텍스트 검색을 표현할 수 있습니다. 이를 통해 다음 작업을 할 수 있습니다.
특정 데이터 객체 필드와 일치시킵니다.
실행할 일치의 유형을 지정합니다.
검색어별, 대소문자 구분 안 함
정확히, 대소문자 구분
용어 어간, 동의어, 맞춤법 오류, 불용어('a', 'an', 'the' 등)와 일치하도록 언어별 개선사항을 포함합니다.
하위 쿼리를 함께 그룹화하여 평가 순서를 제어합니다.
부스트 점수 기여도를 높여 순위에 영향을 미칩니다.
서브 쿼리에는 세 가지 유형이 있습니다.
텍스트: 검색 텍스트와 일치시킬 하나 이상의 필드를 제공합니다.
결합:
AND또는OR연산자를 적용하여 하위 쿼리를 결합하며, 다른 결합된 하위 쿼리를 그룹화하여 평가 순서를 제어하는 데 사용할 수 있습니다.
이 페이지의 예시에서는 다음 표에 표시된 Collection을 사용합니다. 여기에는 6개의 데이터 객체가 포함되어 있으며 데이터 스키마에 문자열 ID, Title, Description, 문자열 배열 Keywords과 같은 필드가 정의되어 있습니다.
| ID | 제목 | 설명 | 키워드 |
|---|---|---|---|
| 1 | The Quick Brown Fox | 빠른 갈색 여우가 게으른 개를 쉽게 뛰어넘습니다. | 야생, 숲, 포유류, 주황색, 민첩성, 포식자 |
| 2 | Lazy Dog Days | 갈색 개가 잠을 자고 있습니다. | 국내, 반려동물, 집, 개, 차분함, 게으름, 순종 |
| 3 | 여우 대 개 | 빠른 여우가 개를 속입니다. | 야생, 가축, 갈등, 개아목, 포유류, 상호작용 |
| 4 | 브라운 베어스 | 숲 속에서 빠르게 움직입니다. | 야생, 숲, 곰, 최상위 포식자, 동면, 거대 |
| 5 | 여우 이야기 | 개가 높이 점프합니다. | 교활함, 점프 |
| 6 | My Lazy Days of Summer | 여름방학 동안 휴식을 취하는 것에 관한 짧은 이야기 | 여름, 휴식, 휴가, 태양 |
텍스트 하위 쿼리
텍스트 쿼리는 데이터 객체의 하나 이상의 필드와 일치합니다. 모든 구조화된 쿼리에는 하나 이상의 텍스트 쿼리가 포함되어야 합니다.
다음 예에서는 기본 텍스트 쿼리를 정의합니다.
"text_search": {
"structured_query": {
"text": {
"text": "fox vs dog"
}
}
}
기본적으로 텍스트는 개별 용어로 분할되고 각 용어는 지정된 필드에서 검색됩니다. 위의 예에서는 Title 필드에서 'fox', 'vs', 'dog'이라는 용어를 검색합니다.
텍스트 쿼리에는 다음과 같은 선택적 매개변수가 있습니다.
fields: 일치시킬 필드의 배열입니다. 지정하지 않으면 모든 필드와 일치합니다. 필드는 암시적OR연산자와 일치합니다.match_type: 실행할 일치 유형입니다. 검색 유형은EXACT일 수 있으며, 이는 필드가 검색 텍스트와 정확히 일치해야 함을 지정합니다. 필드가 문자열 배열인 경우 배열의 요소에 대해 일치 여부가 확인됩니다.enhancement:enabled및languageCode를 지정하여languageCode에 지정된 언어 (예:en-US)의 동의어, 어간, 철자 오류, 불용어에 대해 일치를 실행할 수 있습니다. 기본값은 개선이 없습니다.boost: 선택사항. 쿼리의 점수에 적용할 배수입니다. 기본값은1.0입니다.
일치 유형
match_type 매개변수는 검색 텍스트가 필드의 값과 일치하는 방식을 지정합니다.
매개변수의 값은 다음 중 하나일 수 있습니다.
EXACT: 필드가 검색어와 정확히 일치해야 합니다. 필드가 문자열 배열인 경우 배열의 요소와 일치하는지 확인합니다.
다음 예에서는 EXACT 검색 유형을 지정합니다.
"text_search": {
"structured_query": {
"text": {
"text": "Fox vs Dog",
"fields": [ "Title" ],
"match_type": "EXACT"
}
}
}
문자열 배열의 검색 유형
쿼리 결과는 다음 표에 표시됩니다.
| 점수 | ID | 제목 | 설명 | 키워드 |
|---|---|---|---|---|
| 1.0000 | 3 | 여우 대 개 | 빠른 여우가 개를 속입니다. | 야생, 가축, 갈등, 개아목, 포유류, 상호작용 |
필드가 문자열 배열인 경우 검색 텍스트는 배열 요소와 일치합니다.
다음 예시에서는 Keywords 문자열 배열에서 정확한 텍스트 wild를 검색하는 방법을 보여줍니다.
"text_search": {
"structured_query": {
"text": {
"text": "wild",
"fields": [ "Keywords" ],
"match_type": "EXACT"
}
}
}
쿼리 결과는 다음 표에 표시됩니다.
| 점수 | ID | 제목 | 설명 | 키워드 |
|---|---|---|---|---|
| 1.0000 | 3 | 여우 대 개 | 빠른 여우가 개를 속입니다. | 야생, 가축, 갈등, 개아목, 포유류, 상호작용 |
| 1.0000 | 4 | 브라운 베어스 | 숲 속에서 빠르게 움직입니다. | 야생, 숲, 곰, 최상위 포식자, 동면, 거대 |
| 1.0000 | 1 | The Quick Brown Fox | 빠른 갈색 여우가 게으른 개를 쉽게 뛰어넘습니다. | 야생, 숲, 포유류, 주황색, 민첩성, 포식자 |
쿼리 개선사항
검색어에는 언어별 개선사항을 지정하는 선택적 queryEnhancement 매개변수가 포함될 수 있습니다. 여기에는 동의어, 어간('점프' 어간 '점핑' 등), 잘못된 맞춤법, 불용어('a', 'an', 'the' 등)에 대한 일치가 포함됩니다.
매개변수는 다음 속성이 있는 객체입니다.
enabled: 개선사항을 사용 설정할지 여부를 지정하는 불리언입니다.languageCode: 개선사항의 언어를 지정하는 문자열입니다(예:en-US).
다음 예에서는 en-US 언어의 개선사항을 사용 설정합니다.
"text_search": {
"structured_query": {
"text": {
"text": {
"text": "jump",
"fields": [ "Description" ],
"queryEnhancement": {
"enabled": true,
"languageCode": "en-US"
}
}
}
}
}
쿼리 결과는 다음 표에 표시됩니다.
| 점수 | ID | 제목 | 설명 | 키워드 |
|---|---|---|---|---|
| 0.3419 | 1 | The Quick Brown Fox | 빠른 갈색 여우가 게으른 개를 쉽게 뛰어넘습니다. | 야생, 숲, 포유류, 주황색, 민첩성, 포식자 |
| 0.3419 | 5 | 여우 이야기 | 개가 높이 점프합니다. | 교활함, 점프 |
queryEnhancement이 지정되지 않았거나 enabled이 false인 경우 일치하는 항목이 없습니다.
결합된 하위 쿼리
결합된 쿼리는 두 개 이상의 하위 쿼리에 불리언 연산을 적용합니다. 지원되는 작업은 AND 및 OR입니다.
결합된 쿼리에는 다음과 같은 속성이 있습니다.
op: 하위 쿼리에 적용할 불리언 연산자입니다. 값은AND또는OR일 수 있습니다.subQueries: 결합할 하위 쿼리의 배열입니다. 다른 결합된 쿼리를 포함하여 지원되는 하위 쿼리 유형이 될 수 있습니다. 최대 중첩 깊이는 2입니다.boost: 선택사항. 쿼리의 점수에 적용할 배수입니다. 기본값은1.0입니다.
접속사 (AND)
AND 연산자는 모든 하위 쿼리의 용어가 포함된 데이터 객체와 일치합니다.
다음 예는 AND 연산자를 사용하여 텍스트 쿼리 3개를 결합하는 방법을 보여줍니다.
"text_search": {
"structured_query": {
"combine": {
"op": "AND",
"subQueries": [
{
"text": {
"text": "Brown",
"fields": [ "Title" ]
}
},
{
"text": {
"text": "quick",
"fields": [ "Description" ]
}
},
{
"text": {
"text": "forest predator",
"fields": [ "Keywords" ]
}
}
]
}
}
}
이 예에서는 세 개의 하위 쿼리가 모두 일치하는 경우에만 일치가 이루어집니다.
쿼리 결과는 다음 표에 표시됩니다.
| 점수 | ID | 제목 | 설명 | 키워드 |
|---|---|---|---|---|
| 5.0587 | 4 | 브라운 베어스 | 숲 속에서 빠르게 움직입니다. | 야생, 숲, 곰, 최상위 포식자, 동면, 거대 |
| 5.0587 | 1 | The Quick Brown Fox | 빠른 갈색 여우가 게으른 개를 쉽게 뛰어넘습니다. | 야생, 숲, 포유류, 주황색, 민첩성, 포식자 |
일치시킬 필드가 여러 개인 텍스트 하위 쿼리에는 다음 예와 같이 암시적 OR가 적용됩니다.
"text_search": {
"structured_query": {
"combine": {
"op": "AND",
"subQueries": [
{
"text": {
"text": "Brown",
"fields": [ "Title", "Description" ]
}
},
{
"text": {
"text": "quick",
"fields": [ "Description" ]
}
},
{
"text": {
"text": "forest predator",
"fields": [ "Keywords" ]
}
}
]
}
}
}
앞의 예시를 다시 보겠습니다.
첫 번째 하위 쿼리는
Title또는Description필드에서 대소문자를 구분하지 않는 용어Brown와 일치합니다.두 번째 하위 쿼리는
Description필드에서 대소문자를 구분하지 않는quick용어와 일치합니다.세 번째 하위 쿼리는
Keywords문자열 배열 필드의 값 중 하나에서 대소문자를 구분하지 않는forest및predator용어와 일치합니다.세 개의 하위 쿼리가 모두 일치하면 결합된 쿼리가 일치합니다.
쿼리 결과는 다음 표에 표시됩니다.
| 점수 | ID | 제목 | 설명 | 키워드 |
|---|---|---|---|---|
| 6.3176 | 1 | The Quick Brown Fox | 빠른 갈색 여우가 게으른 개를 쉽게 뛰어넘습니다. | 야생, 숲, 포유류, 주황색, 민첩성, 포식자 |
| 5.0587 | 4 | 브라운 베어스 | 숲 속에서 빠르게 움직입니다. | 야생, 숲, 곰, 최상위 포식자, 동면, 거대 |
분리 (OR)
OR 연산자는 하위 쿼리 중 하나의 검색어가 포함된 데이터 객체와 일치합니다.
다음 예는 OR 연산자를 사용하여 텍스트 쿼리 3개를 결합하는 방법을 보여줍니다.
"text_search": {
"structured_query": {
"combine": {
"op": "OR",
"subQueries": [
{
"text": {
"text": "Brown",
"fields": [ "Title", "Description" ]
}
},
{
"text": {
"text": "quick",
"fields": [ "Description" ]
}
},
{
"text": {
"text": "forest predator",
"fields": [ "Keywords" ]
}
}
]
}
}
}
이 예에서는 세 개의 하위 쿼리 중 하나라도 일치하면 일치하는 것으로 간주됩니다.
쿼리 결과는 다음 표에 표시됩니다.
| 점수 | ID | 제목 | 설명 | 키워드 |
|---|---|---|---|---|
| 6.3176 | 1 | The Quick Brown Fox | 빠른 갈색 여우가 게으른 개를 쉽게 뛰어넘습니다. | 야생, 숲, 포유류, 주황색, 민첩성, 포식자 |
| 5.0587 | 4 | 브라운 베어스 | 숲 속에서 빠르게 움직입니다. | 야생, 숲, 곰, 최상위 포식자, 동면, 거대 |
그룹화
평가 순서를 제어하기 위해 결합된 하위 쿼리를 다른 결합된 하위 쿼리 내에 중첩할 수 있습니다.
다음 예에서는 하위 쿼리를 그룹화하는 방법을 보여줍니다.
"text_search": {
"structured_query": {
"combine": {
"op": "AND",
"subQueries": [
{
"combine": {
"op": "OR",
"subQueries": [
{
"text": {
"text": "Fox",
"fields": [ "Title" ]
}
},
{
"text": {
"text": "jumps",
"fields": [ "Description" ]
}
}
]
}
},
{
"unary": {
"op": "NOT",
"subQuery": {
"text": {
"text": "domestic",
"fields": [ "Keywords" ]
}
}
}
}
]
}
}
}
위의 예는 다음 표현식과 같습니다.
(Title의 대소문자를 구분하지 않는 Fox OR Description의 대소문자를 구분하지 않는 jumps) AND NOT Keywords 요소의 대소문자를 구분하지 않는 domestic
다음 표는 쿼리 결과를 보여줍니다.
| 점수 | ID | 제목 | 설명 | 키워드 |
|---|---|---|---|---|
| 3.5178 | 1 | The Quick Brown Fox | 빠른 갈색 여우가 게으른 개를 쉽게 뛰어넘습니다. | 야생, 숲, 포유류, 주황색, 민첩성, 포식자 |
| 2.2589 | 5 | 여우 이야기 | 개가 높이 점프합니다. | 교활함, 점프 |
단항 서브 쿼리
단항 하위 쿼리는 구조화된 쿼리에서 단일 하위 쿼리에 불리언 연산을 적용합니다. NOT 연산자만 지원되는 단항 연산자입니다.
단항 쿼리에는 다음과 같은 속성이 있습니다.
op: 하위 쿼리에 적용할 불리언 연산자입니다. 값은NOT일 수 있습니다.subQuery: 단항 연산을 적용할 하위 쿼리입니다.boost: 선택사항. 쿼리의 점수에 적용할 배수입니다. 기본값은1.0입니다.
부정 (NOT)
NOT 연산자는 하위 쿼리의 용어가 포함되지 않은 데이터 객체를 찾습니다.
다음 예에서는 NOT 연산자를 사용하는 방법을 보여줍니다.
"text_search": {
"structured_query": {
"unary": {
"op": "NOT",
"subQuery": {
"text": {
"text": "dog",
"fields": [ "Description" ]
}
}
}
}
}
쿼리 결과는 다음 표에 표시됩니다.
| 점수 | ID | 제목 | 설명 | 키워드 |
|---|---|---|---|---|
| 1.000 | 4 | 브라운 베어스 | 숲 속에서 빠르게 움직입니다. | 야생, 숲, 곰, 최상위 포식자, 동면, 거대 |
| 1.000 | 6 | My Lazy Days of Summer | 여름방학 동안 휴식을 취하는 것에 관한 짧은 이야기 | 여름, 휴식, 휴가, 태양 |
문자열 배열에 적용하면 NOT 연산자는 용어가 배열의 요소에 포함되지 않은 경우 데이터 객체와 일치합니다.
이 예에서는 대소문자를 구분하지 않는 용어 orange이 Keywords 문자열 배열의 어떤 요소에도 포함되지 않으면 일치합니다.
"text_search": {
"structured_query": {
"combine": {
"op": "AND",
"subQueries": [
{
"text": {
"text": "Brown",
"fields": [ "Title" ]
}
},
{
"text": {
"text": "quick",
"fields": [ "Description" ]
}
},
{
"text": {
"text": "forest predator",
"fields": [ "Keywords" ]
}
},
{
"unary": {
"op": "NOT",
"subQuery": {
"text": {
"text": "orange",
"fields": [ "Keywords" ]
}
}
}
}
]
}
}
}
쿼리 결과는 다음 표에 표시됩니다.
| 점수 | ID | 제목 | 설명 | 키워드 |
|---|---|---|---|---|
| 6.0587 | 4 | 브라운 베어스 | 숲 속에서 빠르게 움직입니다. | 야생, 숲, 곰, 최상위 포식자, 동면, 거대 |
부스팅
모든 하위 쿼리에는 하위 쿼리의 점수에 승수를 적용하는 boost 매개변수가 있을 수 있습니다. 기본적으로 모든 하위 쿼리의 boost는 1.0입니다.
다음 예에서는 하위 쿼리를 부스팅하는 방법을 보여줍니다.
"text_search": {
"structured_query": {
"combine": {
"op": "OR",
"subQueries": [
{
"text": {
"text": "fox",
"fields": [ "Title" ]
},
"boost": 1.0
},
{
"text": {
"text": "jumps",
"fields": [ "Description" ]
},
"boost": 1.0
},
{
"text": {
"text": "interaction",
"fields": [ "Keywords" ]
},
"boost": 5.0
}
]
}
}
}
쿼리 결과는 다음 표에 표시됩니다.
| 점수 | ID | 제목 | 설명 | 키워드 |
|---|---|---|---|---|
| 7.5534 | 3 | 여우 대 개 | 빠른 여우가 개를 속입니다. | 야생, 가축, 갈등, 개아목, 포유류, 상호작용 |
| 2.5178 | 1 | The Quick Brown Fox | 빠른 갈색 여우가 게으른 개를 쉽게 뛰어넘습니다. | 야생, 숲, 포유류, 주황색, 민첩성, 포식자 |
| 1.2589 | 5 | 여우 이야기 | 개가 높이 점프합니다. | 교활함, 점프 |
시맨틱 검색
이 검색은 텍스트 쿼리를 임베딩으로 변환하여 시맨틱 의미를 기반으로 결과를 찾습니다. 스키마에 정의된 embedding-config를 사용하여 쿼리 임베딩을 생성합니다. vector_search 필드가 여러 개 제공되면 동일한 가중치를 사용하여 결과가 결합됩니다.
하이브리드 검색을 사용하여 검색
batch_search_data_objects를 사용하여 벡터 검색, 텍스트 검색, 시맨틱 검색 등 여러 검색을 동시에 실행합니다. 결과는 선택적으로 ReciprocalRankFusion 순위 지정 도구를 사용하여 결합하고 순위를 지정할 수 있습니다. 이 도구는 Reciprocal Rank Fusion (RFF) 알고리즘을 사용하여 결과 세트를 병합합니다.