시작하기 전에
샘플 문서를 Document AI Warehouse로 수집하려면 빠른 시작 가이드를 참조하세요.
검색할 데이터 정의
문서 스키마를 정의하고 문서를 만들 때는 정의할 속성과 검색에 사용할 속성(있는 경우)을 고려하는 것이 중요합니다.
검색을 위해 문서의 일부를 포함하거나 제외하는 데 속성을 사용하려면 속성을 필터링 가능으로 표시하세요. 예를 들어 사용자가 특정 공급업체의 송장을 검색하려고 하므로 '공급업체'를 나타내는 속성을 필터링 가능으로 만들 수 있습니다.
속성에 히스토그램을 구성하려면 (이 주제의 뒷부분에 나오는 예 참고) 속성이 필터링 가능해야 합니다.
사용자가 키워드 검색 중에 쿼리할 데이터가 있는 경우 속성을 검색 가능으로 표시하세요.
전체 텍스트 검색
전체 텍스트 검색은 검색 가능한 텍스트에서 검색 키워드와 일치하는 모든 문서를 가져오는 프로세스입니다. 사용자는 키워드 목록 (공백으로 구분된 단어)을 제공합니다. 이 목록은 UI의 검색 필드에 입력된 것으로 추정됩니다. Document AI Warehouse에서 키워드는 처리되어 적절한 쿼리로 변환됩니다. 이러한 처리는 불용어('the', 'in', 'an')를 삭제하고 나머지 단어의 어간을 추출합니다. 어간 추출은 단어를 일반적인 버전의 단어로 줄여 단어 변형이 일치하도록 합니다. 예를 들어 'work', 'working', 'worked'가 있습니다.
검색되는 데이터
- 문서의
plain_text입니다. - Document AI 객체를 가져오는 경우 삽입된
cloud_ai_document.text를 사용합니다. - 문서의 display_name입니다.
- 검색 가능한 모든 속성입니다.
쿼리는 Google AIP 스타일 구문을 부분적으로 지원합니다. 특히 쿼리는 리터럴, 논리 연산자, 부정 연산자, 비교 연산자, 함수를 지원합니다.
- 리터럴: 일반 리터럴 값 (예: '42', 'Hugo')은 일치시킬 값입니다. 문서의 전체 텍스트와 검색 가능한 속성을 검색합니다.
- 논리 연산자: 'AND', 'and', 'OR', 'or'는 바이너리 논리 연산자입니다 (예: 'engineer OR developer').
- 부정 연산자: 'NOT' 및 '!'는 부정 연산자입니다 (예: 'NOT software').
비교 연산자: 문자열, 숫자, enum, 불리언에 대해 바이너리 비교 연산자
=,!=,<,>,<=,>=를 지원합니다. 문자열에 대해 like 연산자~~도 지원합니다. 입력 쿼리에 대해 파싱, 어간 추출, 동의어 확장을 실행하여 시맨틱 검색 기능을 제공합니다.쿼리에서 속성을 지정하려면 비교의 왼쪽 표현식이 상위 요소를 포함한 속성 ID여야 합니다. 오른쪽은 리터럴이어야 합니다. 예를 들어
\"projects/123/locations/us\".property_a < 1은 프로젝트123및us위치에서property_a이 1보다 작은 결과와 일치합니다. 리터럴 및 비교 표현식은 단일 쿼리에서 연결할 수 있습니다 (예:software engineer \"projects/123/locations/us\".salary > 100).함수: 지원되는 함수는 대소문자를 구분하지 않는 일치를 실행하는
LOWER([property_name])와 키의 존재 여부를 필터링하는EMPTY([property_name])입니다.괄호와 논리 연산자를 사용하여 연결된 중첩된 표현식을 지원합니다. 표현식 사이에 연산자가 없으면 기본 논리 연산자는
AND입니다.
쿼리는 다른 필터(예: time_filters, folder_name_filter)와 함께 사용할 수 있습니다. 내부적으로 AND 연산자로 연결됩니다.
검색 쿼리는 property, time, schema, folder, creator와 같은 추가 매개변수로 필터링할 수 있습니다.
검색 요청 호출
검색 서비스를 호출하려면 다음과 같이 정의된 검색 요청을 사용해야 합니다.
{
"requestMetadata": {
object (RequestMetadata)
},
"documentQuery": {
object (DocumentQuery)
},
"offset": integer,
"pageSize": integer,
"pageToken": string,
"orderBy": string,
"histogramQueries": [
{
object (HistogramQuery)
}
],
"requireTotalSize": boolean,
"totalResultSize": enum (TotalResultSize),
"qaSizeLimit": integer
}
parent 필드는 다음 형식으로 채워야 합니다.
/projects/PROJECT_ID/locations/LOCATION
검색 요청 응답
검색 응답은 다음과 같이 정의됩니다.
{
"matchingDocuments": [
{
object (MatchingDocument)
}
],
"nextPageToken": string,
"totalSize": integer,
"metadata": {
object (ResponseMetadata)
},
"histogramQueryResults": [
{
object (HistogramQueryResult)
}
]
}
문서 쿼리
document_query 필드는 다음과 같이 정의됩니다.
query 필드는 요청하는 사용자의 검색어입니다. 일반적으로 UI의 검색 필드에서 가져옵니다.
필터
Document AI Warehouse는 다양한 필터를 제공합니다.
문서 시간 필터
생성 및 업데이트 시간 필터는 예상대로 작동합니다. 지정된 기간 내에 키워드와 일치하는 문서를 찾습니다.
TimeFilter 객체는 기간을 지정하는 데 사용되며 다음과 같이 정의됩니다.
{
"timeRange": {
object (Interval)
},
"timeField": enum (TimeField)
}
time_field 필드는 time_range에 지정된 기간이 문서의 생성 시간인지 문서의 최종 업데이트 시간인지 지정하는 곳입니다.
time_range 필드는 기간을 Interval로 지정합니다. Interval은 다음과 같이 정의됩니다.
크리에이터 필터
특정 사용자가 만든 문서를 검색하려면 크리에이터 필터를 사용하세요. 예를 들면 다음과 같습니다.
{
document_query {
query: "videogames director",
documentCreatorFilter: [
"diane@some_company.com",
"frank@some_company.com",
],
},
}
속성 필터
속성 필터를 사용하면 속성이 필터링 가능하도록 구성된 경우 스키마에 지정한 속성에 필터를 지정할 수 있습니다.
예를 들어 법률 업계에서 속성 필터를 사용하면 COURT라는 속성을 필터링하여 특정 법원의 문서만 검색할 수 있습니다.
속성 필터는 PropertyFilter 객체를 사용합니다. 속성 필터는 두 개 이상 사용할 수 있습니다. 여러 속성 필터를 사용하면 OR 연산자를 사용하여 결합됩니다.
속성 필터는 다음과 같이 정의됩니다.
{
"documentSchemaName": string,
"condition": string
}
속성은 스키마에 정의됩니다. 따라서 documentSchemaName 필드는 필터링에 사용하는 속성의 스키마를 지정하는 곳입니다. condition 필드에서 원하는 로직을 지정합니다. documentSchemaName 및 condition 필드 사용 예는 이 페이지의 앞부분에 나오는 예를 참고하세요.
일치하는 문서
일치하는 문서에는 Document와 스니펫 (나중에 설명)이 포함됩니다. MatchingDocument에서 반환된 문서는 완전히 채워진 문서가 아닙니다. 요청하는 사용자에게 검색 결과 목록을 표시하기 위한 최소한의 데이터가 포함되어 있습니다. 전체 문서가 필요한 경우 (예: 사용자가 검색 결과를 클릭한 경우) GetDocument API를 통해 전체 문서를 가져와야 합니다.
다음 Document 필드가 채워집니다. Project number, Document id, Document schema id, Create time, Update time, Display name, Raw document file type, Reference id, Filterable properties.
일치하는 문서는 다음과 같습니다.
{
"document": {
object (Document)
},
"searchTextSnippet": string,
"qaResult": {
object (QAResult)
}
}
순위/정렬
검색 요청을 사용하면 결과를 정렬할 방법을 지정할 수 있습니다. 정렬하려면 검색 요청에서 order_by 필드를 사용합니다. 이 필드에 가능한 값은 다음과 같습니다.
relevance desc- 관련성 내림차순입니다. 즉, 가장 일치하는 항목이 상단에 있습니다.upload_date desc- 문서가 생성된 날짜 내림차순입니다 (최신 항목이 상단에 있음).upload_date- 문서가 생성된 날짜 오름차순입니다 (가장 오래된 항목이 상단에 있음).update_date desc- 문서가 마지막으로 업데이트된 날짜 내림차순입니다 (최신 항목이 상단에 있음).Update_date- 문서가 마지막으로 업데이트된 날짜 오름차순입니다 (가장 오래된 항목이 상단에 있음).
정렬을 지정하지 않지만 검색 키워드를 제공하는 경우 관련성 내림차순으로 정렬됩니다 (가장 일치하는 항목이 상단에 있음). 정렬도 키워드도 제공되지 않으면 기본 정렬은 업데이트 시간 내림차순입니다 (최신 문서가 상단에 있음).
페이지로 나누기
페이지로 나누기는 최종 사용자에게 페이지 분량의 데이터를 표시하는 데 유용합니다. 여기에서 페이지 크기를 지정하고 사용자에게 다시 표시할 결과 크기의 총 개수를 가져올 수 있습니다 (예: '300개 문서 중 50개 표시').
page_size 필드를 검색 요청과 함께 수신할 결과의 원하는 수로 설정합니다. 이는 UI 검색 결과 표시 크기의 요구사항에 해당할 수 있습니다.
오프셋과 페이지 토큰이라는 두 가지 메커니즘이 있습니다.
오프셋은 반환할 반환 가능한 문서 목록의 색인입니다. 예를 들어 오프셋이 5이면 여섯 번째 문서부터 원하는 것입니다. 다음 결과 페이지의 경우 오프셋을 페이지 크기만큼 늘려야 합니다.
또는 페이지 토큰을 사용하면 다음 오프셋을 계산할 필요가 없습니다. 첫 번째 검색 요청을 한 후 next_page_token 필드가 포함된 검색 응답을 받습니다. 이 필드가 비어 있으면 더 이상 결과가 없습니다. 필드가 비어 있지 않으면 page_token 필드를 설정하여 다음 검색 요청에서 이 토큰을 사용합니다.
일부 UI는 검색에서 찾은 문서 수를 표시합니다. 예를 들어 you are viewing 10 documents of 120입니다. 반환된 문서 수를 가져오려면 요청의 require_total_size boolean 필드를 True로 설정합니다.
도움말: require_total_size=True는 성능 저하를 유발합니다. 첫 번째 페이지 쿼리에서 이를 설정한 다음 후속 요청에서 모두 false로 설정하여 총 개수를 로컬 변수에 유지합니다.
코드 샘플
Python
자세한 내용은 Document AI Warehouse Python API 참조 문서를 참고하세요.
Document AI Warehouse에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참고하세요.
Java
자세한 내용은 Document AI Warehouse Java API 참조 문서를 참고하세요.
Document AI Warehouse에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참고하세요.