문서 검색 및 가져오기

이 문서에서는 Developer Knowledge API를 사용하여 Google의 공개 개발자 문서를 프로그래매틱 방식으로 검색하고 가져오는 방법을 보여줍니다. API를 사용하면 웹페이지를 수동으로 스크랩하는 대신 애플리케이션에서 관련 텍스트 스니펫을 찾거나 전체 마크다운 문서를 가져올 수 있습니다.

이 문서에서는 다음 작업의 예를 확인할 수 있습니다.

  • 문서 코퍼스를 검색합니다.
  • 검색 결과를 페이지로 나누기
  • 검색에 복잡한 필터를 적용합니다.
  • 전체 문서 콘텐츠를 가져옵니다.
  • 지연 시간을 줄이기 위해 응답 페이로드를 최적화합니다.

시작하기 전에 원하는 도구의 환경을 설정하세요.

gcloud

gcloud CLI를 설치 및 구성하고 Developer Knowledge API를 사용 설정합니다.

REST

API를 사용 설정하고 Developer Knowledge API 키를 생성합니다. 그런 다음 키를 환경 변수에 저장합니다.

export DEVELOPERKNOWLEDGE_API_KEY="YOUR_API_KEY"

YOUR_API_KEY를 Developer Knowledge API 키로 바꿉니다.

문서 검색

gcloud developer-knowledge documents search-chunks 명령어 또는 documents.searchDocumentChunks REST 메서드를 사용하여 쿼리 문자열과 일치하는 문서 청크를 찾습니다. 결과에는 일치하는 문서의 콘텐츠 청크와 함께 해당 문서의 전체 콘텐츠를 검색하는 데 사용할 수 있는 parent 참조가 포함됩니다.

다음 예에서는 'BigQuery'와 일치하는 문서를 검색합니다.

gcloud

gcloud developer-knowledge documents search-chunks \
  --query="BigQuery"

REST

curl "https://developerknowledge.googleapis.com/v1/documents:searchDocumentChunks?query=BigQuery&key=$DEVELOPERKNOWLEDGE_API_KEY"

출력은 다음과 비슷합니다.

{
  "results": [
    {
      "parent": "documents/docs.cloud.google.com/bigquery/docs/introduction",
      "id": "chunk_0",
      "content": "BigQuery is a fully managed enterprise data warehouse...",
      "document": {
        "name": "documents/docs.cloud.google.com/bigquery/docs/introduction",
        "uri": "https://docs.cloud.google.com/bigquery/docs/introduction",
        "title": "BigQuery overview",
        "dataSource": "docs.cloud.google.com",
        "updateTime": "2025-01-15T12:00:00Z"
      },
      "relevanceScore": 0.92
    }
  ]
}

results 목록의 각 결과에는 다음이 포함됩니다.

  • parent: 문서 리소스 이름 (예: documents/docs.cloud.google.com/bigquery/docs/introduction)
  • id: 문서 내 청크 식별자입니다 (예: chunk_0).
  • content: 문서에서 일치하는 텍스트 스니펫입니다.
  • document: 소스 문서에 관한 메타데이터입니다(예: title, uri, dataSource, updateTime).
  • relevanceScore: 검색어에 대한 청크의 관련성 점수입니다(범위: [0.0, 1.0]).

응답 스키마 및 사용 가능한 모든 메타데이터 필드에 대한 자세한 내용은 documents.searchDocumentChunks API 참조를 참고하세요.

검색 결과 페이지로 나누기

검색어에서 여러 일치 항목이 반환되는 경우 페이지로 나누기 매개변수를 사용하여 결과 집합을 탐색할 수 있습니다.

  • --page-size (gcloud CLI) 또는 pageSize (정수): 페이지당 반환할 최대 결과 수를 지정합니다. 지정하지 않으면 API는 기본적으로 5개의 결과를 반환합니다. 허용되는 최댓값은 100이며, 100을 초과하는 값은 100으로 변환됩니다.
  • --limit (gcloud CLI) 또는 pageToken (문자열): gcloud CLI에서 --limit를 사용하여 페이지에 걸쳐 반환되는 총 결과 수를 제어합니다. REST 요청에서 이전 응답에서 수신한 pageToken 값을 전달하여 결과의 다음 페이지를 가져옵니다.

gcloud

--page-size 및 --limit 플래그를 전달하여 페이지당 결과 수와 반환된 총 결과 수를 제어합니다.

gcloud developer-knowledge documents search-chunks \
  --query="BigQuery" \
  --page-size=5 \
  --limit=10

REST

  1. 첫 번째 페이지를 요청하려면 요청에서 pageSize 파라미터를 전달합니다.

    curl "https://developerknowledge.googleapis.com/v1/documents:searchDocumentChunks?query=BigQuery&pageSize=5&key=$DEVELOPERKNOWLEDGE_API_KEY"
    

    추가 결과를 사용할 수 있는 경우 응답에 nextPageToken이 포함됩니다.

    {
      "results": [
        {
          "parent": "documents/docs.cloud.google.com/bigquery/docs/introduction",
          "id": "chunk_0",
          "content": "BigQuery is a fully managed enterprise data warehouse...",
          "document": {
            "name": "documents/docs.cloud.google.com/bigquery/docs/introduction",
            "uri": "https://docs.cloud.google.com/bigquery/docs/introduction",
            "title": "What is BigQuery?",
            "dataSource": "docs.cloud.google.com",
            "updateTime": "2025-01-15T12:00:00Z",
            "view": "DOCUMENT_VIEW_BASIC"
          },
          "relevanceScore": 0.88
        }
      ],
      "nextPageToken": "CAUQABgB"
    }
    
  2. 후속 페이지를 검색하려면 다음 요청에서 nextPageToken 값을 pageToken 매개변수에 전달합니다.

    curl "https://developerknowledge.googleapis.com/v1/documents:searchDocumentChunks?query=BigQuery&pageSize=5&pageToken=CAUQABgB&key=$DEVELOPERKNOWLEDGE_API_KEY"
    

    결과의 마지막 페이지에 도달하면 nextPageToken이 응답에서 생략됩니다.

검색결과 필터링하기

gcloud CLI에서 --query-filter 플래그를 사용하거나 REST 요청에서 filter 매개변수를 사용하여 검색 결과에 엄격한 필터를 적용합니다. 필터 표현식은 각 청크의 상위 문서 메타데이터에 적용됩니다.

필터 표현식은 500자 글자 수 제한이 있습니다.

지원되는 필드

다음 상위 문서 필드를 사용하여 검색 결과를 필터링할 수 있습니다.

  • content_length_bytes(정수): 문서의 content 필드 길이(바이트)입니다.
  • data_source(문자열): 문서의 소스 도메인입니다(예: docs.cloud.google.com 또는 firebase.google.com). 지원되는 모든 데이터 소스는 코퍼스 참조를 참고하세요.
  • update_time (타임스탬프): 문서가 마지막으로 업데이트된 타임스탬프입니다. 값은 RFC 3339 형식을 사용해야 합니다 (예: "2025-01-01T00:00:00Z").
  • uri (문자열): 문서의 전체 URI입니다 (예: https://docs.cloud.google.com/bigquery/docs/tables).

지원되는 연산자

필터 표현식 파서는 필드의 데이터 유형에 따라 다양한 연산자를 지원합니다.

  • 문자열 필드 (data_source, uri): 정확한 문자열 일치를 위해 = (같음) 및 !=(같지 않음) 지원 부분, 접두사, 정규 표현식 일치는 지원되지 않습니다.
  • 타임스탬프 필드 (update_time): =, <, <=, >, >= 지원
  • 정수 필드 (content_length_bytes): =, !=, <, <=, >, >=을 지원합니다.
  • 논리 연산자: AND, OR, NOT (또는 -)을 사용하여 조건을 결합합니다.

필터 예시

다음 예에서는 필터 표현식을 구성하는 방법을 보여줍니다. gcloud CLI를 사용하는 경우 --query-filter 플래그에 표현식을 전달합니다. curl으로 REST API를 호출할 때는 filter 매개변수를 URL로 인코딩하거나 --data-urlencode를 사용해야 합니다.

단일 데이터 소스 일치

검색 결과를 단일 문서 도메인으로 제한합니다.

data_source = "docs.cloud.google.com"

gcloud

gcloud developer-knowledge documents search-chunks \
  --query="Cloud Functions deployment" \
  --query-filter='data_source = "docs.cloud.google.com"'

REST

curl -G "https://developerknowledge.googleapis.com/v1/documents:searchDocumentChunks" \
  --data-urlencode "query=Cloud Functions deployment" \
  --data-urlencode 'filter=data_source = "docs.cloud.google.com"' \
  --data-urlencode "key=$DEVELOPERKNOWLEDGE_API_KEY"

여러 데이터 소스 일치

OR를 사용하여 여러 소스의 문서를 포함합니다.

data_source = "docs.cloud.google.com" OR data_source = "firebase.google.com"

gcloud

gcloud developer-knowledge documents search-chunks \
  --query="database" \
  --query-filter='data_source = "docs.cloud.google.com" OR data_source = "firebase.google.com"'

REST

curl -G "https://developerknowledge.googleapis.com/v1/documents:searchDocumentChunks" \
  --data-urlencode "query=database" \
  --data-urlencode 'filter=data_source = "docs.cloud.google.com" OR data_source = "firebase.google.com"' \
  --data-urlencode "key=$DEVELOPERKNOWLEDGE_API_KEY"

타임스탬프로 필터링

RFC 3339 타임스탬프와 함께 비교 연산자를 사용하여 특정 날짜 이후에 업데이트된 콘텐츠를 찾습니다.

update_time >= "2025-01-01T00:00:00Z"

gcloud

gcloud developer-knowledge documents search-chunks \
  --query="BigQuery" \
  --query-filter='update_time >= "2025-01-01T00:00:00Z"'

REST

curl -G "https://developerknowledge.googleapis.com/v1/documents:searchDocumentChunks" \
  --data-urlencode "query=BigQuery" \
  --data-urlencode 'filter=update_time >= "2025-01-01T00:00:00Z"' \
  --data-urlencode "key=$DEVELOPERKNOWLEDGE_API_KEY"

콘텐츠 길이로 필터링

content_length_bytes와 함께 비교 연산자를 사용하여 바이트 크기에 따라 문서를 찾습니다.

content_length_bytes < 5000

gcloud

gcloud developer-knowledge documents search-chunks \
  --query="Cloud Storage" \
  --query-filter='content_length_bytes < 5000'

REST

curl -G "https://developerknowledge.googleapis.com/v1/documents:searchDocumentChunks" \
  --data-urlencode "query=Cloud Storage" \
  --data-urlencode 'filter=content_length_bytes < 5000' \
  --data-urlencode "key=$DEVELOPERKNOWLEDGE_API_KEY"

데이터 소스, 타임스탬프, 그룹화 결합

AND, OR, 괄호 (...)를 결합하여 특정 날짜 이후에 업데이트된 특정 소스로 결과를 제한합니다.

(data_source = "developer.chrome.com" OR data_source = "web.dev") AND update_time >= "2025-01-01T00:00:00Z"

gcloud

gcloud developer-knowledge documents search-chunks \
  --query="service worker" \
  --query-filter='(data_source = "developer.chrome.com" OR data_source = "web.dev") AND update_time >= "2025-01-01T00:00:00Z"'

REST

curl -G "https://developerknowledge.googleapis.com/v1/documents:searchDocumentChunks" \
  --data-urlencode "query=service worker" \
  --data-urlencode 'filter=(data_source = "developer.chrome.com" OR data_source = "web.dev") AND update_time >= "2025-01-01T00:00:00Z"' \
  --data-urlencode "key=$DEVELOPERKNOWLEDGE_API_KEY"

데이터 소스 제외

NOT 또는 !=를 사용하여 특정 소스의 결과를 제외합니다.

data_source != "firebase.google.com"

gcloud

gcloud developer-knowledge documents search-chunks \
  --query="authentication" \
  --query-filter='data_source != "firebase.google.com"'

REST

curl -G "https://developerknowledge.googleapis.com/v1/documents:searchDocumentChunks" \
  --data-urlencode "query=authentication" \
  --data-urlencode 'filter=data_source != "firebase.google.com"' \
  --data-urlencode "key=$DEVELOPERKNOWLEDGE_API_KEY"

문서 가져오기

gcloud developer-knowledge documents describe 명령어 또는 documents.get REST 메서드를 사용하여 단일 문서의 전체 콘텐츠를 가져옵니다.

다음 예에서는 리소스 이름으로 문서를 가져옵니다.

gcloud

gcloud developer-knowledge documents describe \
  documents/docs.cloud.google.com/storage/docs/creating-buckets

REST

curl "https://developerknowledge.googleapis.com/v1/documents/docs.cloud.google.com/storage/docs/creating-buckets?key=$DEVELOPERKNOWLEDGE_API_KEY"

응답은 메타데이터와 content 필드의 전체 마크다운 콘텐츠가 포함된 Document 리소스입니다.

리소스 이름과 URI 비교

Developer Knowledge API에서 문서를 참조할 때는 리소스 이름과 웹 URI의 차이점을 참고하세요.

  • 리소스 이름 (parent, name): documents/{uri_without_scheme} 형식으로 지정됩니다 (예: documents/docs.cloud.google.com/storage/docs/creating-buckets). 이 값을 gcloud developer-knowledge documents describe의 위치 인수, GetDocument의 경로 매개변수 또는 BatchGetDocuments의 names 매개변수로 전달합니다.
  • 웹 URI (uri): 스키마를 포함한 전체 웹 URL (예: https://docs.cloud.google.com/storage/docs/creating-buckets). --query-filter 또는 filter 표현식 (예: uri = "https://docs.cloud.google.com/storage/docs/creating-buckets")을 구성할 때 uri 필드에 이 형식을 사용합니다.

BatchGetDocuments로 여러 문서 가져오기

documents.batchGet 메서드를 사용하여 단일 API 호출에서 이름으로 최대 20개의 문서를 검색합니다. 이는 GetDocument 요청을 여러 번 수행하는 것보다 효율적입니다.

다음 예에서는 이름으로 두 문서를 가져옵니다.

curl "https://developerknowledge.googleapis.com/v1/documents:batchGet?names=documents/docs.cloud.google.com/storage/docs/creating-buckets&names=documents/firebase.google.com/docs/firestore/quickstart&key=$DEVELOPERKNOWLEDGE_API_KEY"

응답에는 요청한 순서대로 요청된 Document 리소스 목록이 포함됩니다.

응답 페이로드 최적화

마크다운 형식의 문서 콘텐츠는 클 수 있습니다. 애플리케이션에 메타데이터 (예: 페이지 제목, URI, 타임스탬프) 또는 특정 필드만 필요한 경우 페이로드 크기를 최적화하여 대역폭과 지연 시간을 줄일 수 있습니다.

문서 뷰 사용

gcloud CLI의 --view 플래그 또는 REST 요청의 view 매개변수는 Document 메시지에 채워지는 필드를 제어합니다.

--view 플래그와 DocumentView 열거형은 다음 값을 지원합니다.

  • --view=basic (gcloud CLI) 또는 DOCUMENT_VIEW_BASIC: 기본 메타데이터 필드 (name, uri, dataSource, title, description, updateTime, view)만 반환합니다. content 필드는 생략됩니다.
  • --view=content (gcloud CLI) 또는 DOCUMENT_VIEW_CONTENT: 마크다운 content 필드와 함께 메타데이터 필드를 반환합니다. gcloud developer-knowledge documents describe, GetDocument, BatchGetDocuments의 기본값입니다.
  • --view=full (gcloud CLI) 또는 DOCUMENT_VIEW_FULL: 모든 문서 필드를 반환합니다.

대규모 마크다운 콘텐츠를 다운로드하지 않고 문서 메타데이터만 가져오려면 기본 문서 보기를 지정하세요.

gcloud

gcloud developer-knowledge documents describe \
  documents/docs.cloud.google.com/storage/docs/creating-buckets \
  --view=basic

REST

curl "https://developerknowledge.googleapis.com/v1/documents/docs.cloud.google.com/storage/docs/creating-buckets?view=DOCUMENT_VIEW_BASIC&key=$DEVELOPERKNOWLEDGE_API_KEY"

BatchGetDocuments와 함께 view=DOCUMENT_VIEW_BASIC을 사용할 수도 있습니다.

curl "https://developerknowledge.googleapis.com/v1/documents:batchGet?names=documents/docs.cloud.google.com/storage/docs/creating-buckets&names=documents/firebase.google.com/docs/firestore/quickstart&view=DOCUMENT_VIEW_BASIC&key=$DEVELOPERKNOWLEDGE_API_KEY"

필드 마스크 사용

응답 페이로드를 특정 필드로 추가 제한하려면 표준 Google API fields 쿼리 매개변수(필드 마스크)를 사용하세요.

GetDocument에서 필드 필터링

문서의 title, uri, updateTime 필드만 가져오려면 다음을 실행하세요.

curl "https://developerknowledge.googleapis.com/v1/documents/docs.cloud.google.com/storage/docs/creating-buckets?fields=title,uri,updateTime&key=$DEVELOPERKNOWLEDGE_API_KEY"

BatchGetDocuments에서 필드 필터링

일괄 처리의 각 문서에 대해 특정 필드만 검색하려면 다음을 실행하세요.

curl "https://developerknowledge.googleapis.com/v1/documents:batchGet?names=documents/docs.cloud.google.com/storage/docs/creating-buckets&fields=documents(name,title,uri)&key=$DEVELOPERKNOWLEDGE_API_KEY"

청크 id 및 content, 상위 문서 title 및 uri, 검색의 nextPageToken만 반환하려면 다음을 실행하세요.

curl "https://developerknowledge.googleapis.com/v1/documents:searchDocumentChunks?query=BigQuery&fields=results(id,content,document(title,uri)),nextPageToken&key=$DEVELOPERKNOWLEDGE_API_KEY"

오류 처리

Developer Knowledge API는 표준 HTTP 상태 코드를 반환합니다. 다음 기능 예에서는 Developer Knowledge API의 HTTP 상태 코드와 원인을 매핑합니다.

  • 400 INVALID_ARGUMENT:
    • filter 표현식 문자열이 500자를 초과합니다.
    • update_time 타임스탬프가 유효하지 않습니다 (RFC 3339 형식을 사용해야 함).
    • BatchGetDocuments 요청에 20개가 넘는 문서 이름이 제공되었습니다.
  • 401 UNAUTHENTICATED: 요청에 API 키가 누락되었거나 잘못된 키를 사용합니다. 인증을 참고하세요.
  • 404 NOT_FOUND: 요청된 문서 이름이 존재하지 않거나 코퍼스에 포함되지 않은 도메인에 속합니다.
  • 429 RESOURCE_EXHAUSTED: 프로젝트가 할당량을 초과했습니다. 할당량 및 한도를 참고하세요.

다음 단계