자습서: REST 및 AI를 사용하여 Azure Blob에서 검색 가능한 콘텐츠 생성

Azure Blob Storage에 비정형 텍스트 또는 이미지가 있는 경우 AI 보강 파이프라인은 정보를 추출하여 전체 텍스트 검색 또는 지식 마이닝 시나리오에 사용되는 새 콘텐츠를 만들 수 있습니다.

이 REST 자습서에서는 다음 방법을 알아봅니다.

  • 개발 환경 설정.
  • OCR, 언어 감지, 엔터티 인식 및 핵심 구 추출을 사용하는 파이프라인을 정의합니다.
  • 파이프라인을 실행하여 변환을 호출하고, 검색 인덱스를 만들고 로드합니다.
  • 전체 텍스트 검색과 풍부한 쿼리 구문을 사용하여 결과를 검색합니다.

Azure 구독이 없는 경우 시작하기 전에 체험 계정을 엽니다.

개요

이 자습서에서는 Postman 및 Azure Cognitive Search REST API 를 사용하여 데이터 원본, 인덱스, 인덱서 및 기술 세트를 만듭니다.

인덱서는 Azure Blob Storage에 연결하고 미리 로드해야 하는 콘텐츠를 검색합니다. 그런 다음 인덱서는 특수 처리를 위한 기술 세트를 호출하고 보강된 콘텐츠를 검색 인덱스에 수집합니다.

기술 세트는 인덱서에 연결됩니다. Microsoft의 기본 제공 기술을 사용하여 정보를 찾고 추출합니다. 파이프라인의 단계에는 이미지, 언어 감지, 핵심 구 추출 및 엔터티 인식(조직, 위치, 사람)에 대한 OCR(광학 인식)이 포함됩니다. 파이프라인에서 생성하는 새 정보는 인덱스의 새 필드에 저장됩니다. 인덱스가 채워지면 쿼리, 패싯 및 필터에서 해당 필드를 사용할 수 있습니다.

필수 조건

참고

이 자습서에서는 체험 서비스를 사용할 수 있습니다. 체험 검색 서비스에서는 인덱스, 인덱서 및 데이터 원본이 각각 3개로 제한됩니다. 이 자습서에서는 각각을 하나씩 만듭니다. 시작하기 전에 새 리소스를 수용할 수 있는 공간이 서비스에 있는지 확인하세요.

파일 다운로드

샘플 데이터는 이후 단계에서 Azure Blob Storage에 업로드할 혼합 콘텐츠 형식의 14개 파일로 구성되어 있습니다.

  1. azure-search-sample-data/ai-enrichment-mixed-media/에서 파일을 가져와서 로컬 컴퓨터에 복사합니다.

  2. 다음으로, 이 자습서의 소스 코드인 Postman 컬렉션 파일을 가져옵니다. 소스 코드는 azure-search-postman-samples/tree/master/Tutorial에서 찾을 수 있습니다.

1 - 서비스 만들기

이 자습서에서는 Azure Cognitive Search를 인덱싱 및 쿼리에 사용하고, AI 보강을 위해 백 엔드의 Cognitive Services를 사용하고, Azure Blob Storage를 사용하여 데이터를 제공합니다. 이 자습서는 Cognitive Services에 인덱서당 하루 20개의 트랜잭션을 무료로 할당하기 때문에, 검색 및 스토리지 서비스만 만들면 됩니다.

가능하면, 근접성과 관리 효율성을 위해 두 가지 모두를 동일한 지역과 리소스 그룹에 만듭니다. 실제로 Azure Storage 계정은 모든 지역에 있을 수 있습니다.

Azure Storage 시작

  1. Azure Portal에 로그인하고, + 리소스 만들기를 클릭합니다.

  2. 스토리지 계정을 검색하고, Microsoft의 스토리지 계정 제품을 선택합니다.

    Create Storage account

  3. [기본 사항] 탭의 필수 항목은 다음과 같습니다. 다른 모든 항목에는 기본값을 적용합니다.

    • 리소스 그룹. 기존 서비스를 선택하거나 새 서비스를 만들지만 동일한 그룹을 모든 서비스에 사용하여 전체적으로 관리할 수 있습니다.

    • 스토리지 계정 이름. 동일한 유형의 여러 리소스가 있을 수 있다고 생각되면 유형 및 지역별로 구분할 수 있는 이름(예: blobstoragewestus)을 사용합니다.

    • 위치 - 가능하면 Azure Cognitive Search 및 Cognitive Services에 사용되는 것과 동일한 위치를 선택합니다. 단일 위치에는 대역폭 요금이 부과되지 않습니다.

    • 계정 종류. 기본값인 StorageV2(범용 v2) 를 선택합니다.

  4. 검토 + 만들기를 선택하여 서비스를 만듭니다.

  5. 만든 후에는 리소스로 이동하여 개요 페이지를 엽니다.

  6. Blobs 서비스를 선택합니다.

  7. + 컨테이너를 선택하여 컨테이너를 만들고 이름을 cog-search-demo로 지정합니다.

  8. cog-search-demo를 선택한 다음 업로드를 선택하여 다운로드 파일을 저장한 폴더를 엽니다. 모든 파일을 선택합니다. 업로드를 선택합니다.

    Screenshot of the files in File Explorer.

  9. Azure Storage를 나가기 전에 Azure Cognitive Search에서 연결을 만들 수 있도록 연결 문자열을 가져옵니다.

    1. 스토리지 계정의 [개요] 페이지로 돌아갑니다(blobstragewestus를 예로 사용했음).

    2. 왼쪽 탐색 창에서 액세스 키를 선택하고, 연결 문자열 중 하나를 복사합니다.

    연결 문자열은 다음 예제와 비슷한 URL입니다.

    DefaultEndpointsProtocol=https;AccountName=cogsrchdemostorage;AccountKey=<your account key>;EndpointSuffix=core.windows.net
    
  10. 연결 문자열을 메모장에 저장합니다. 이는 나중에 데이터 원본 연결을 설정할 때 필요합니다.

Cognitive Services

AI 보강은 자연어 및 이미지 처리를 위한 언어 서비스 및 Computer Vision을 비롯한 Cognitive Services에서 지원됩니다. 실제 프로토타입 또는 프로젝트를 완료하는 것이 목표라면 이 시점에서 Cognitive Services(Azure Cognitive Search와 동일한 지역)를 프로비전하여 기술 세트에 연결할 수 있습니다.

그러나 이 연습에서는 Azure Cognitive Search가 Cognitive Services에 연결하여 인덱서 실행당 20개의 트랜잭션을 무료로 실행할 수 있으므로 리소스 프로비저닝을 건너뛸 수 있습니다. 이 자습서에서는 14개의 트랜잭션을 사용하므로 체험 할당이 충분합니다. 대규모 프로젝트의 경우 종량제 S0 계층에서 Cognitive Services를 프로비저닝할 계획입니다.

세 번째 구성 요소는포털에서 만들거나 구독에서 기존 검색 서비스를 찾을 수 있는 Azure Cognitive Search입니다.

이 연습은 체험 계층을 사용하여 완료할 수 있습니다.

Azure Cognitive Search 서비스와 상호 작용하려면 서비스 URL과 액세스 키가 필요합니다.

  1. Azure Portal에 로그인하고, 검색 서비스 개요 페이지에서 검색 서비스의 이름을 확인합니다. 엔드포인트 URL을 검토하여 서비스 이름을 확인할 수 있습니다. 엔드포인트 URL이 https://mydemo.search.windows.net인 경우 서비스 이름은 mydemo입니다.

  2. 설정>에서 서비스에 대한 모든 권한의 관리자 키를 가져옵니다. 기본 또는 보조 키를 복사할 수 있습니다.

    Get the service name and admin key

검색 서비스에 대한 모든 HTTP 요청에는 API 키가 필요합니다. 유효한 키는 요청을 보내는 애플리케이션과 이 요청을 처리하는 서비스 간에 요청별로 신뢰를 설정합니다.

2 - Postman 설정

  1. Postman을 시작하고, 컬렉션을 가져오고, 환경 변수를 설정합니다. 이 도구가 생소한 경우 Azure Cognitive Search REST API 살펴보기를 참조하세요.

  2. 검색 서비스 이름, 관리자 API 키, 인덱스 이름, Azure Storage 계정에 대한 연결 문자열 및 컨테이너 이름을 제공해야 합니다.

    Screenshot of the Variables page in Postman.

이 컬렉션에 사용되는 요청 메서드는 PUTGET입니다. 이 메서드를 사용하여 데이터 원본, 기술 세트, 인덱스 및 인덱터를 만듭니다.

3 - 파이프라인 만들기

Azure Cognitive Search에서 보강은 인덱싱(또는 데이터 수집) 중에 발생합니다. 이 연습 부분에서는 데이터 원본, 인덱스 정의, 기술 세트, 인덱서의 네 가지 개체를 만듭니다.

1단계: 데이터 소스 만들기

데이터 원본 만들기를 호출하여 샘플 데이터 파일이 포함된 Blob 컨테이너에 연결 문자열을 설정합니다.

  1. "데이터 원본 만들기" 요청을 선택합니다.

  2. 요청 본문은 JSON이며 인덱서 데이터 원본 개체의 속성을 포함합니다. 연결 문자열에는 서비스에 액세스하기 위한 자격 증명이 포함됩니다.

    {   
        "description" : "Demo files to demonstrate cognitive search capabilities.",  
        "type" : "azureblob",
        "credentials" : { 
           "connectionString": "{{azure-storage-connection-string}}"
        },  
      "container" : { 
        "name" : "{{blob-container}}"
      }
    }
    
  3. 요청을 보냅니다. 성공 여부를 확인하는 201 상태 코드가 표시됩니다.

403 또는 404 오류가 발생한 경우 검색 관리자 API 키 및 Azure Storage 연결 문자열을 확인합니다.

2단계: 기술 집합 만들기

기술 만들기를 호출하여 콘텐츠에 적용되는 보강 단계를 지정합니다.

  1. "기술 세트 만들기" 요청을 선택합니다.

  2. 요청 본문은 다음과 같은 기본 제공 기술을 지정합니다.

    기술 설명
    광학 문자 인식 이미지 파일의 텍스트와 숫자를 인식합니다.
    텍스트 병합 이전에 구분된 콘텐츠를 다시 결합하는 "병합된 콘텐츠"를 만듭니다. 포함된 이미지(PDF, DOCX 등)가 있는 문서에 유용합니다. 이미지와 텍스트는 문서 크래킹 단계에서 구분됩니다. 병합 기술은 보강 중에 생성된 인식된 텍스트, 이미지 캡션 또는 태그를 문서에서 이미지가 추출된 동일한 위치에 삽입하여 다시 결합합니다.

    기술 세트에서 병합된 콘텐츠로 작업할 때 이 노드는 OCR 또는 이미지 분석을 거치지 않는 텍스트 전용 문서를 포함하여 문서의 모든 텍스트를 포함합니다.
    언어 감지 언어를 검색하고 언어 이름 또는 코드를 출력합니다. 다국어 데이터 집합에서 언어 필드는 필터에 유용할 수 있습니다.
    엔터티 인식 병합된 콘텐츠에서 사람, 조직 및 위치의 이름을 추출합니다.
    텍스트 나누기 핵심 구 추출 기술을 호출하기 전에 큰 병합된 콘텐츠를 더 작은 청크로 나눕니다. 핵심 구 추출은 50,000자 이하의 입력을 허용합니다. 일부 샘플 파일은 이 제한에 맞게 분할해야 합니다.
    핵심 구 추출 상위 핵심 구를 가져옵니다.

    각 기술은 문서의 콘텐츠에서 실행됩니다. 처리하는 동안 Azure Cognitive Search는 각 문서를 해독하여 다른 파일 형식의 콘텐츠를 읽습니다. 원본 파일에서 발생하는 텍스트는 각 문서에 대해 생성되는 content 필드에 배치됩니다. 따라서 입력은 "/document/content"가 됩니다.

    핵심 구 추출의 경우 텍스트 분할기 기술을 사용하여 더 큰 파일을 페이지로 분할하므로 핵심 구 추출 기술의 컨텍스트는 "/document/content" 대신 "document/pages/*"(문서의 각 페이지에 대해)입니다.

    {
      "description": "Apply OCR, detect language, extract entities, and extract key-phrases.",
      "cognitiveServices": null,
      "skills":
      [
        {
          "@odata.type": "#Microsoft.Skills.Vision.OcrSkill",
          "context": "/document/normalized_images/*",
          "defaultLanguageCode": "en",
          "detectOrientation": true,
          "inputs": [
            {
              "name": "image",
              "source": "/document/normalized_images/*"
            }
          ],
          "outputs": [
            {
              "name": "text"
            }
          ]
        },
        {
          "@odata.type": "#Microsoft.Skills.Text.MergeSkill",
          "description": "Create merged_text, which includes all the textual representation of each image inserted at the right location in the content field. This is useful for PDF and other file formats that supported embedded images.",
          "context": "/document",
          "insertPreTag": " ",
          "insertPostTag": " ",
          "inputs": [
            {
              "name":"text", 
              "source": "/document/content"
            },
            {
              "name": "itemsToInsert", 
              "source": "/document/normalized_images/*/text"
            },
            {
              "name":"offsets", 
              "source": "/document/normalized_images/*/contentOffset" 
            }
          ],
          "outputs": [
            {
              "name": "mergedText", 
              "targetName" : "merged_text"
            }
          ]
        },
        {
          "@odata.type": "#Microsoft.Skills.Text.SplitSkill",
          "textSplitMode": "pages",
          "maximumPageLength": 4000,
          "defaultLanguageCode": "en",
          "context": "/document",
          "inputs": [
            {
              "name": "text",
              "source": "/document/merged_text"
            }
          ],
          "outputs": [
            {
              "name": "textItems",
              "targetName": "pages"
            }
          ]
        },
        {
          "@odata.type": "#Microsoft.Skills.Text.LanguageDetectionSkill",
          "description": "If you have multilingual content, adding a language code is useful for filtering",
          "context": "/document",
          "inputs": [
            {
              "name": "text",
              "source": "/document/merged_text"
            }
          ],
          "outputs": [
            {
              "name": "languageName",
              "targetName": "language"
            }
          ]
        },
        {
          "@odata.type": "#Microsoft.Skills.Text.KeyPhraseExtractionSkill",
          "context": "/document/pages/*",
          "inputs": [
            {
              "name": "text",
              "source": "/document/pages/*"
            }
          ],
          "outputs": [
            {
              "name": "keyPhrases",
              "targetName": "keyPhrases"
            }
          ]
        },
        {
          "@odata.type": "#Microsoft.Skills.Text.V3.EntityRecognitionSkill",
          "categories": ["Organization"],
          "context": "/document",
          "inputs": [
            {
              "name": "text",
              "source": "/document/merged_text"
            }
          ],
          "outputs": [
            {
              "name": "organizations",
              "targetName": "organizations"
            }
          ]
        },
        {
          "@odata.type": "#Microsoft.Skills.Text.V3.EntityRecognitionSkill",
          "categories": ["Location"],
          "context": "/document",
          "inputs": [
            {
              "name": "text",
              "source": "/document/merged_text"
            }
          ],
          "outputs": [
            {
              "name": "locations",
              "targetName": "locations"
            }
          ]
        },
        {
          "@odata.type": "#Microsoft.Skills.Text.V3.EntityRecognitionSkill",
          "categories": ["Person"],
          "context": "/document",
          "inputs": [
            {
              "name": "text",
              "source": "/document/merged_text"
            }
          ],
          "outputs": [
            {
              "name": "persons",
              "targetName": "persons"
            }
          ]
        }
      ]
    }
    

    기술 세트 부분의 그래픽 표현은 다음과 같습니다.

    Understand a skillset

  3. 요청을 보냅니다. Postman에서 성공 여부를 확인하는 201 상태 코드를 반환합니다.

참고

출력을 인덱스에 매핑할 수도 있고, 다운스트림 기술의 입력으로 사용할 수도 있고, 언어 코드처럼 둘 다 할 수도 있습니다. 인덱스에서 언어 코드는 필터링에 유용합니다. 기술 집합 기본에 대한 자세한 내용은 기술 집합을 정의하는 방법을 참조하세요.

3단계: 인덱스 만들기

인덱스 만들기를 호출하여 Azure Cognitive Search에서 반전된 인덱스 및 기타 구문을 만드는 데 사용되는 스키마를 제공합니다. 인덱스의 가장 큰 구성 요소는 데이터 형식 및 특성이 Azure Cognitive Search의 콘텐츠 및 동작을 결정하는 필드 컬렉션입니다.

  1. "인덱스 만들기" 요청을 선택합니다.

  2. 요청 본문은 검색 인덱스의 스키마를 정의합니다. 필드 컬렉션에는 하나의 필드를 키로 지정해야 합니다. Blob 콘텐츠의 경우 이 필드는 종종 컨테이너의 각 Blob을 고유하게 식별하는 "metadata_storage_path"입니다.

    이 스키마에서 "text" 필드는 OCR 출력을 수신하고, "content"는 병합된 출력을 수신하고, "language"는 언어 검색 출력을 수신합니다. Blob Storage에서 해제된 핵심 구, 엔터티 및 여러 필드는 나머지 항목으로 구성됩니다.

    {
      "fields": [
        {
          "name": "text",
          "type": "Collection(Edm.String)",
          "searchable": true,
          "sortable": false,
          "filterable": true,
          "facetable": false
        },
        {
          "name": "content",
          "type": "Edm.String",
          "searchable": true,
          "sortable": false,
          "filterable": false,
          "facetable": false
        },
        {
          "name": "language",
          "type": "Edm.String",
          "searchable": false,
          "sortable": true,
          "filterable": true,
          "facetable": false
        },
        {
          "name": "keyPhrases",
          "type": "Collection(Edm.String)",
          "searchable": true,
          "sortable": false,
          "filterable": true,
          "facetable": true
        },
        {
          "name": "organizations",
          "type": "Collection(Edm.String)",
          "searchable": true,
          "sortable": false,
          "filterable": true,
          "facetable": true
        },
        {
          "name": "persons",
          "type": "Collection(Edm.String)",
          "searchable": true,
          "sortable": false,
          "filterable": true,
          "facetable": true
        },
        {
          "name": "locations",
          "type": "Collection(Edm.String)",
          "searchable": true,
          "sortable": false,
          "filterable": true,
          "facetable": true
        },
        {
          "name": "metadata_storage_path",
          "type": "Edm.String",
          "key": true,
          "searchable": true,
          "sortable": false,
          "filterable": false,
          "facetable": false
        },
        {
          "name": "metadata_storage_name",
          "type": "Edm.String",
          "searchable": true,
          "sortable": false,
          "filterable": false,
          "facetable": false
        }
      ]
    }
    
  3. 요청을 보냅니다. Postman에서 성공 여부를 확인하는 201 상태 코드를 반환합니다.

4단계: 인덱서 만들기 및 실행

Create Indexer를 호출하여 파이프라인을 구동합니다. 지금까지 만든 세 가지 구성 요소(데이터 원본, 기술 세트, 인덱스)는 인덱서에 대한 입력입니다. Azure Cognitive Search에서 인덱서를 만드는 것은 전체 파이프라인을 이동시키는 이벤트입니다.

  1. "인덱서 만들기" 요청을 선택합니다.

  2. 요청 본문에는 이전 개체에 대한 참조, 이미지 처리에 필요한 구성 속성 및 두 가지 유형의 필드 매핑이 포함됩니다.

    "fieldMappings" 는 기술 세트 전에 처리되어 데이터 원본의 콘텐츠를 인덱스 내의 대상 필드로 보냅니다. 필드 매핑을 사용하여 수정되지 않은 기존 콘텐츠를 인덱스로 보냅니다. 필드 이름과 유형이 양쪽 끝에서 동일하면 매핑이 필요 없습니다.

    "outputFieldMappings" 는 기술 세트 실행 후 기술로 만든 필드에 대한 것입니다. outputFieldMappingssourceFieldName에 대한 참조는 문서 크래킹 또는 보강에서 만들 때까지 존재하지 않습니다. targetFieldName은 인덱스 스키마에 정의된 인덱스의 필드입니다.

    {
      "dataSourceName" : "{{index_name}}-datasource",
      "targetIndexName" : "{{index_name}}",
      "skillsetName" : "{{index_name}}-skillset",
      "fieldMappings" : [
            {
              "sourceFieldName" : "metadata_storage_path",
              "targetFieldName" : "metadata_storage_path",
              "mappingFunction" : { "name" : "base64Encode" }
            },
            {
            	"sourceFieldName": "metadata_storage_name",
            	"targetFieldName": "metadata_storage_name"
            }
       ],
      "outputFieldMappings" : 
    	[
    		{
            	"sourceFieldName": "/document/merged_text",
            	"targetFieldName": "content"
            },
            {
                "sourceFieldName" : "/document/normalized_images/*/text",
                "targetFieldName" : "text"
            },
      		{
              "sourceFieldName" : "/document/organizations", 
              "targetFieldName" : "organizations"
            },
            {
            	"sourceFieldName": "/document/language",
            	"targetFieldName": "language"
            },
      		{
              "sourceFieldName" : "/document/persons", 
              "targetFieldName" : "persons"
            },
      		{
              "sourceFieldName" : "/document/locations", 
              "targetFieldName" : "locations"
            },
            {
              "sourceFieldName" : "/document/pages/*/keyPhrases/*", 
              "targetFieldName" : "keyPhrases"
            }
        ],
      "parameters":
      {
    	"batchSize": 1,
      	"maxFailedItems":-1,
      	"maxFailedItemsPerBatch":-1,
      	"configuration": 
    	{
        	"dataToExtract": "contentAndMetadata",
        	"imageAction": "generateNormalizedImages"
    	}
      }
    }
    
  3. 요청을 보냅니다. Postman에서 성공적인 처리 여부를 확인하는 201 상태 코드를 반환합니다.

    이 단계를 완료하는 데는 몇 분 정도 걸릴 수 있습니다. 데이터 집합이 작아도 분석 기술은 계산을 많이 수행합니다.

참고

인덱서를 만들면 파이프라인이 호출됩니다. 데이터 도달, 입력 및 출력 매핑 또는 작업 순서에 문제가 있으면 이 단계에 나타납니다. 코드 또는 스크립트를 변경하고 파이프라인을 다시 실행하려면 먼저 개체를 삭제해야 합니다. 자세한 내용은 다시 설정하고 다시 실행을 참조하세요.

인덱서 매개 변수 정보

스크립트는 -1로 설정 "maxFailedItems" 됩니다. 이 스크립트는 데이터를 가져오는 동안 오류를 무시하도록 인덱싱 엔진에 지시합니다. 데모 데이터 원본에는 몇 개의 문서만 있으므로 이는 허용됩니다. 데이터 원본의 크기가 큰 경우에는 0보다 큰 값으로 설정해야 합니다.

"dataToExtract":"contentAndMetadata" 문은 다른 파일 형식의 콘텐츠 및 각 파일과 관련된 메타데이터를 자동으로 추출하도록 인덱서에 지시합니다.

콘텐츠가 추출되면 데이터 원본에서 찾은 이미지의 텍스트를 추출하도록 imageAction을 설정할 수 있습니다. "imageAction":"generateNormalizedImages" 구성은 OCR 기술 및 텍스트 병합 기술과 결합되어 이미지에서 텍스트(예: 트래픽 중지 신호의 "중지"라는 단어)를 추출하고 해당 텍스트를 콘텐츠 필드의 일부로 포함시키도록 인덱서에 지시합니다. 이 동작은 문서에 포함된 이미지(예: PDF 내 이미지)뿐 아니라 JPG 파일 같은 데이터 원본의 이미지에도 적용됩니다.

4 - 인덱싱 모니터링

인덱싱 및 보강은 인덱서 만들기 요청을 제출하는 즉시 시작됩니다. 정의한 인지 기술에 따라 인덱싱하는 데 시간이 걸릴 수 있습니다.

인덱서가 여전히 실행 중인지 확인하려면 인덱서 상태 가져오기 를 호출하여 인덱서 상태를 확인합니다.

  1. "인덱서 상태 확인" 요청을 선택하고 보냅니다.

  2. 응답을 검토하여 인덱서가 실행되고 있는지 알아보거나 오류 및 경고 정보를 확인합니다.

경고는 일부 시나리오에서 일반적이며, 항상 문제를 나타내는 것은 아닙니다. 예를 들어 Blob 컨테이너에 이미지 파일이 포함되어 있고 파이프라인에서 이미지를 처리하지 않으면 이미지가 처리되지 않았다는 경고가 표시됩니다.

이 샘플에는 텍스트가 없는 PNG 파일이 있습니다. 5가지 텍스트 기반 기술(언어 감지, 위치의 엔터티 인식, 조직, 사람 및 핵심 구 추출)은 모두 이 파일에서 실행되지 않습니다. 결과 알림이 실행 기록에 표시됩니다.

이제 AI 생성 콘텐츠가 포함된 인덱스를 만들었으므로 검색 문서를 호출하여 일부 쿼리를 실행하여 결과를 확인합니다.

전체 문서가 하나의 content 필드로 패키지되는 Blob 콘텐츠를 사용하여 시작했습니다. 이 필드를 검색하고 쿼리와 일치하는 항목을 찾을 수 있습니다.

  1. "검색" 요청을 열고 실행하여 인덱스 콘텐츠를 처음 살펴봅니다. 이 요청은 빈 검색("search=*")이므로 14개 문서 각각에 대한 콘텐츠를 반환합니다. $select 매개 변수는 결과를 파일 이름, 언어 이름 및 인식된 엔터티 중 하나로 제한합니다.

     GET /indexes//{{index_name}}/docs?search=*&$select=metadata_storage_name,language,organizations&$count=true&api-version=2020-06-30
    
  2. 이전 쿼리를 수정하여 "경계 없는 기회 만들기"를 검색합니다. 이 구는 PDF 문서에 포함된 이미지 파일의 OCR을 통해 가져옵니다. 인구밀도가 높은 필드에서 일치하는 용어에 서식을 적용하려면 "강조 표시"를 포함합니다.

     GET /indexes//{{index_name}}/docs?search=creating boundaryless opportunities&$select=content&highlight=content&$count=true&api-version=2020-06-30
    
  3. 다음 쿼리의 경우 필터를 적용합니다. 언어 필드와 모든 엔터티 필드는 필터링할 수 있습니다.

     GET /indexes/{{index_name}}/docs?search=*&$filter=organizations/any(organizations: organizations eq 'NASDAQ')&$select=metadata_storage_name,organizations&$count=true&api-version=2020-06-30
    

이러한 쿼리는 인식 검색을 통해 생성되는 새 필드에 대해 쿼리 구문과 필터를 사용할 수 있는 몇 가지 방법을 보여 줍니다. 자세한 쿼리 예제는 문서 검색 REST API 예제, 단순 구문 쿼리 예제전체 Lucene 쿼리 예제를 참조하세요.

다시 설정하고 다시 실행

개발 초기 단계에서는 디자인을 반복하는 것이 일반적입니다. 동일한 개체를 자주 삭제하고 다시 빌드할 가능성이 큽니다.

포털을 삭제하고 먼저 인덱서 삭제하는 경우 포털에서 연결된 개체를 삭제하라는 메시지를 표시합니다.

Delete search objects

또는 DELETE 를 사용하고 각 개체에 URL을 제공할 수 있습니다. 다음 명령은 인덱서를 삭제합니다.

DELETE https://[YOUR-SERVICE-NAME].search.windows.net/indexers/cog-search-demo-idxr?api-version=2020-06-30

삭제 성공 시 상태 코드 204가 반환됩니다.

핵심 내용

이 자습서에서는 데이터 원본, 기술 집합, 인덱스 및 인덱서라고 하는 구성 요소를 만들어서 보강된 인덱싱 파이프라인을 빌드하는 기본 단계를 살펴보았습니다.

기술 세트 정의 및 입/출력을 통해 기술을 서로 연결하는 메커니즘과 함께 미리 빌드된 기술을 소개했습니다. 인덱서 정의의 outputFieldMappings는 보강된 값을 Azure Cognitive Search 서비스의 파이프라인에서 검색 가능한 인덱스로 라우팅하는 데 필요하다는 것도 배웠습니다.

마지막으로, 결과를 테스트하고 추가 반복을 위해 시스템을 다시 설정하는 방법을 배웠습니다. 인덱스에 대한 쿼리를 실행하면 보강된 인덱싱 파이프라인에서 만든 출력이 반환된다는 것을 배웠습니다.

리소스 정리

사용자 고유의 구독에서 작업하는 경우 프로젝트의 끝에서 더 이상 필요하지 않은 리소스를 제거하는 것이 좋습니다. 계속 실행되는 리소스에는 요금이 부과될 수 있습니다. 리소스를 개별적으로 삭제하거나 리소스 그룹을 삭제하여 전체 리소스 세트를 삭제할 수 있습니다.

왼쪽 탐색 창의 [모든 리소스] 또는 [리소스 그룹] 링크를 사용하여 포털에서 리소스를 찾고 관리할 수 있습니다.

다음 단계

AI 보강 파이프라인의 모든 개체에 대해 알아보았으면, 기술 세트 정의와 개별적인 기술을 자세히 살펴보겠습니다.