다음을 통해 공유


Azure AI 검색에서 인덱서 만들기

이 문서는 인덱서를 만드는 기본 단계에 중점을 둡니다. 데이터 원본 및 워크플로에 따라 더 많은 구성이 필요할 수 있습니다.

인덱서로 Azure AI Search에서 데이터 가져오기 및 인덱싱을 자동화할 수 있습니다. 인덱서는 외부 Azure 데이터 원본에 연결하고, 데이터를 읽고, 인덱싱을 위해 검색 엔진에 전달하는 검색 서비스의 명명된 개체입니다. 인덱서를 사용하면 지원되는 데이터 원본을 사용하는 경우 작성해야 하는 코드의 양과 복잡성이 크게 감소합니다.

인덱서는 다음 두 가지 워크플로를 지원합니다.

  • 원시 콘텐츠 인덱싱(일반 텍스트 또는 벡터): 전체 텍스트 검색 시나리오를 위해 텍스트 콘텐츠에서 문자열 및 메타데이터를 추출합니다. 벡터 검색을 위해 원시 벡터 콘텐츠를 추출합니다(예: Azure SQL 데이터베이스 또는 Azure Cosmos DB 컬렉션의 벡터). 이 워크플로에서 인덱싱은 사용자가 제공하는 기존 콘텐츠에 대해서만 발생합니다.

  • 기술 기반 인덱싱: 검색 가능한 새 콘텐츠를 만들거나 생성하는 기본 제공 또는 사용자 지정 기술을 통해 인덱싱을 확장합니다. 예를 들어 이미지 및 구조화되지 않은 텍스트, 텍스트 및 구조 추출 또는 유추에 대한 분석을 위한 통합 기계 학습을 추가할 수 있습니다. 또는 기술을 사용하여 텍스트 및 이미지의 콘텐츠를 청크 및 벡터화합니다. 기술 기반 인덱싱은 외부 데이터 원본에 존재하지 않는 새 콘텐츠를 만들거나 생성합니다. 들어오는 데이터를 허용하는 인덱스 스키마에 필드를 추가하면 새 콘텐츠가 인덱스의 일부가 됩니다. 자세한 내용은 Azure AI 검색의 AI 보강을 참조하세요.

필수 조건

인덱서 패턴

인덱서 생성 시 정의는 콘텐츠 기반 인덱싱 또는 기술 기반 인덱싱의 두 가지 패턴 중 하나입니다. 기술 기반 인덱싱에 더 많은 정의가 있다는 점을 제외하면 패턴은 동일합니다.

콘텐츠 기반 인덱싱에 대한 인덱서 예제

전체 텍스트 또는 벡터 검색에 대한 콘텐츠 기반 인덱싱은 인덱서의 기본 사용 사례입니다. 이 워크플로의 경우 인덱서는 이 예제와 같습니다.

{
  "name": (required) String that uniquely identifies the indexer,
  "description": (optional),
  "dataSourceName": (required) String indicating which existing data source to use,
  "targetIndexName": (required) String indicating which existing index to use,
  "parameters": {
    "batchSize": null,
    "maxFailedItems": 0,
    "maxFailedItemsPerBatch": 0,
    "base64EncodeKeys": false,
    "configuration": {}
  },
  "fieldMappings": (optional) unless field discrepancies need resolution,
  "disabled": null,
  "schedule": null,
  "encryptionKey": null
}

인덱서에는 다음과 같은 요구 사항이 적용됩니다.

  • name 덱서 컬렉션에서 인덱서 고유하게 식별하는 속성
  • 데이터 원본 개체를 가리키는 dataSourceName 속성 외부 데이터에 대한 연결을 지정합니다.
  • targetIndexName 대상 검색 인덱스로 가리키는 속성

다른 매개 변수는 선택 사항이며, 전체 작업이 실패하기 전에 허용할 오류 수와 같은 런타임 동작을 수정합니다. 필수 매개 변수는 모든 인덱서에 사용할 수 있으며 REST API 참조에 설명되어 있습니다.

Blob, SQL 및 Azure Cosmos DB에 대한 데이터 원본별 인덱서는 원본별 동작에 대한 추가 configuration 매개 변수를 제공합니다. 예를 들어 원본이 Blob Storage인 경우 다음과 같이 파일 확장자를 필터링하는 매개 변수를 설정할 수 있습니다.

"parameters" : { "configuration" : { "indexedFileNameExtensions" : ".pdf,.docx" } }

원본이 Azure SQL인 경우 쿼리 제한 시간 매개 변수를 설정할 수 있습니다.

필드 매핑은 데이터 원본의 필드와 검색 인덱스의 필드 간에 이름 또는 형식이 일치하지 않는 경우 원본-대상 필드를 명시적으로 매핑하는 데 사용됩니다.

기본적으로 검색 서비스에서 인덱서를 만들면 인덱서가 즉시 실행됩니다. 인덱서 실행을 원하지 않는 경우 인덱서 생성 시 true설정합니다disabled.

인덱서 정의의 추가 암호화를 위해 일정을 지정하거나 암호화 키를 설정할 수도 있습니다.

기술 기반 인덱싱을 위한 인덱서 예제

기술 기반 인덱싱은 AI 보강을 사용하여 원시 형식으로 검색할 수 없는 콘텐츠를 처리합니다. 위의 모든 속성과 매개 변수가 적용되지만 다음과 같은 추가 속성은 AI 보강과 관련이 있습니다. skillSetNamecacheoutputFieldMappings

{
  "name": (required) String that uniquely identifies the indexer,
  "dataSourceName": (required) String, provides raw content that will be enriched,
  "targetIndexName": (required) String, name of an existing index,
  "skillsetName" : (required for AI enrichment) String, name of an existing skillset,
  "cache":  {
    "storageConnectionString" : (required if you enable the cache) Connection string to a blob container,
    "enableReprocessing": true
    },
  "parameters": { },
  "fieldMappings": (optional) Maps fields in the underlying data source to fields in an index,
  "outputFieldMappings" : (required) Maps skill outputs to fields in an index,
}

AI 보강은 자체 주체 영역이며 이 문서의 범위를 벗어납니다. 자세한 내용은 AI 보강, Azure AI Search의 기술 세트, 기술 세트 만들기, 보강된 출력 필드 매핑 및 AI 보강을 위한 캐싱 사용으로 시작합니다.

외부 데이터 준비

인덱서는 데이터 세트와 함께 작동합니다. 인덱서를 실행하면 인덱서가 데이터 원본에 연결하고, 컨테이너 또는 폴더에서 데이터를 검색하고, 필요에 따라 JSON으로 직렬화한 후 인덱싱을 위해 검색 엔진에 전달합니다. 이 섹션에서는 텍스트 기반 인덱싱용으로 들어오는 데이터의 요구 사항을 설명합니다.

원본 데이터 작업
JSON 문서 JSON 문서에는 텍스트, 숫자 및 벡터가 포함될 수 있습니다. 들어오는 데이터의 구조 또는 모양은 검색 인덱스의 스키마와 일치해야 합니다. 대부분의 검색 인덱스는 상당히 평면적이며 필드 컬렉션은 동일한 수준의 필드로 구성됩니다. 그러나 복잡한 필드와 컬렉션을 통해 계층 구조체 또는 중첩 구조체가 가능합니다.
관계 데이터를 평면화된 행 집합으로 제공합니다. 여기서 각 행은 인덱스의 전체 또는 부분 검색 문서가 됩니다.

관계형 데이터를 행 집합으로 평면화하려면 SQL 보기를 만들거나 동일한 행에 부모 및 자식 레코드를 반환하는 쿼리를 작성해야 합니다. 예를 들어 기본 제공 호텔 샘플 데이터 세트는 관련 테이블의 객실 레코드에 연결된 50개의 레코드(호텔당 하나씩)가 있는 SQL 데이터베이스입니다. 축적된 데이터를 행 집합으로 평면화하는 쿼리는 각 호텔 레코드의 JSON 문서에 모든 객실 정보를 포함합니다. 포함된 객실 정보는 FOR JSON AUTO 절을 사용하는 쿼리에 의해 생성됩니다.

이 기술에 대한 자세한 내용은 포함된 JSON을 반환하는 쿼리 정의를 참조하세요. 이는 하나의 예일 뿐입니다. 동일한 결과를 얻을 수 있는 다른 방법을 찾을 수 있습니다.
Files 인덱서는 일반적으로 각 파일당 검색 문서를 하나씩 만들며, 검색 문서는 콘텐츠 및 메타데이터에 대한 필드로 구성됩니다. 파일 형식에 따라 인덱서는 종종 한 파일을 여러 검색 문서로 구문 분석할 수 있습니다. 예를 들어 CSV 파일에서 각 행은 독립 실행형 검색 문서가 될 수 있습니다.

검색 가능하고 필터링 가능한 데이터만 끌어오면 됩니다.

  • 검색 가능한 데이터는 텍스트 또는 벡터입니다.
  • 필터링 가능한 데이터는 텍스트 및 숫자(비벡터 필드)입니다.

Azure AI Search는 이미지 파일의 텍스트 설명(AI 보강 참조)을 추출하고 유추하여 검색 가능한 콘텐츠를 만들 수 있지만 어떤 형식으로든 이진 데이터에 대한 전체 텍스트 검색을 수행할 수 없습니다. 마찬가지로 자연어 모델에서 큰 텍스트를 쪼개고 분석하여 구조 또는 관련 정보를 찾아 검색 문서에 추가할 수 있는 새 콘텐츠를 생성할 수 있습니다. 또한 이진 형식의 정량화된 포함을 포함하여 포함에 대한 벡터 검색을 수행할 수도 있습니다.

인덱서가 데이터 문제를 수정하지 않는 경우 다른 형태의 데이터 정리 또는 조작이 필요할 수 있습니다. 자세한 내용은 Azure 데이터베이스 제품의 설명서를 참조해야 합니다.

데이터 원본 준비

인덱서에는 형식, 컨테이너 및 연결을 지정하는 데이터 원본이 필요합니다.

  1. 지원되는 데이터 원본 형식을 사용하고 있는지 확인합니다.

  2. 데이터 원본 정의를 만듭니다. 다음 데이터 원본은 자주 사용되는 몇 가지 원본입니다.

  3. 데이터 원본이 Azure SQL 또는 Cosmos DB와 같은 데이터베이스인 경우 변경 내용 추적을 사용하도록 설정합니다. Azure Storage에는 모든 Blob, 파일 및 테이블의 LastModified 속성을 통해 기본 제공 변경 내용 추적이 있습니다. 다양한 데이터 원본에 대한 링크는 인덱서에서 지원하는 변경 내용 추적 방법을 설명합니다.

인덱스 준비

인덱서에는 검색 인덱스도 필요합니다. 인덱서는 인덱싱을 위해 데이터를 검색 엔진에 전달합니다. 인덱서에 실행 동작을 결정하는 속성이 있는 것처럼 인덱스 스키마에는 문자열이 인덱싱되는 방식에 큰 영향을 주는 속성이 있습니다(문자열만 분석되고 토큰화됨).

  1. 검색 인덱스 만들기부터 시작합니다.

  2. 필드 컬렉션 및 필드 특성을 설정합니다.

    필드는 외부 콘텐츠의 유일한 수신기입니다. 스키마에서 필드의 특성을 지정하는 방법에 따라 각 필드의 값은 필터, 유사 항목 검색 및 자동 완성 쿼리를 위한 축자 문자열로 분석, 토큰화 또는 저장됩니다.

    인덱서는 이름과 형식이 동일할 때 원본 필드를 대상 인덱스 필드에 자동으로 매핑할 수 있습니다. 필드를 암시적으로 매핑할 수 없는 경우 인덱서에 콘텐츠를 라우팅하는 방법을 알려 주는 명시적 필드 매핑을 정의할 수 있습니다.

  3. 각 필드에서 분석기 할당을 검토합니다. 분석기는 문자열을 변환할 수 있습니다. 따라서 인덱싱된 문자열이 전달된 문자열과 다를 수 있습니다. 텍스트 분석(REST)을 사용하여 분석기의 효과를 평가할 수 있습니다. 분석기에 대한 자세한 내용은 텍스트 처리용 분석기를 참조하세요.

인덱싱하는 동안 인덱서는 필드 이름 및 형식만 검사합니다. 인덱스의 해당 검색 필드에 대해 들어오는 내용이 올바른지 확인하는 유효성 검사 단계는 없습니다.

인덱서 만들기

원격 검색 서비스에서 인덱서를 만들 준비가 되면 검색 클라이언트가 필요합니다. 검색 클라이언트는 Azure Portal, REST 클라이언트 또는 인덱서 클라이언트를 인스턴스화하는 코드일 수 있습니다. 초기 개발 및 개념 증명 테스트에는 Azure Portal 또는 REST API를 사용하는 것이 좋습니다.

  1. Azure Portal에 로그인한 다음 검색 서비스를 찾습니다.

  2. 검색 서비스 개요 페이지에서 다음 두 가지 옵션 중에서 선택합니다.

    • 데이터 가져오기 마법사: 마법사는 필요한 요소를 모두 만든다는 측면에서 고유합니다. 다른 방법을 사용하려면 미리 정의된 데이터 원본과 인덱스가 필요합니다.

      데이터 가져오기 마법사를 보여 주는 스크린샷

    • 인덱서 추가: 인덱서 정의를 지정하기 위한 시각적 편집기입니다.

      인덱서 추가 단추를 보여 주는 스크린샷

인덱서 실행

기본적으로 검색 서비스에서 인덱서를 만들면 인덱서가 즉시 실행됩니다. 인덱서 정의에서 true로 설정 disabled 하여 이 동작을 재정의할 수 있습니다. 인덱서 실행은 연결, 필드 매핑 또는 기술 세트 생성에 문제가 있는지 확인하는 결정적인 순간입니다.

여러 가지 방법으로 인덱서를 실행할 수 있습니다.

  • 인덱서 생성 또는 업데이트 시 실행합니다(기본값).

  • 정의에 대한 변경 내용이 없는 경우 요청 시 실행하거나 전체 인덱싱을 위해 초기화하기 전에 실행합니다. 자세한 내용은 인덱서 실행 또는 초기화를 참조하세요.

  • 정기적으로 실행을 호출하도록 인덱서 처리를 예약합니다.

예약된 실행은 일반적으로 최신 변경 내용을 선택할 수 있도록 증분 인덱싱이 필요한 경우에 구현합니다. 따라서 변경 내용 감지 여부에 따라 일정이 달라집니다.

인덱서는 다른 Azure 리소스에 대해 아웃바운드 호출을 수행하는 몇 안 되는 하위 시스템 중 하나입니다. Azure 역할의 관점에서 인덱서에는 별도의 ID가 없습니다. 검색 엔진에서 다른 Azure 리소스로의 연결은 검색 서비스의 시스템 또는 사용자 할당 관리 ID를 사용하여 이루어집니다. 인덱서가 가상 네트워크의 Azure 리소스에 연결되는 경우 해당 연결에 대한 공유 프라이빗 링크를 만들어야 합니다. 보안 연결에 대한 자세한 내용은 Azure AI Search의 보안을 참조하세요.

결과 확인

인덱서 상태를 모니터링하여 상태를 확인합니다. 실행에 성공한 경우에도 경고 및 알림이 포함될 수 있습니다. 성공 및 실패 상태 알림 모두에서 작업에 대한 자세한 내용을 확인해야 합니다.

콘텐츠 확인을 위해 전체 문서 또는 선택한 필드를 반환하는 채워진 인덱스에 대해 쿼리를 실행할 수 있습니다.

변경 내용 감지 및 내부 상태

데이터 원본이 변경 내용 감지를 지원하는 경우 인덱서는 데이터의 기본 변경 내용을 감지하고 각 인덱서 실행에서 새 문서나 업데이트된 문서만 처리하여 변경되지 않은 콘텐츠를 그대로 유지할 수 있습니다. 인덱서 실행 기록에 0/0 문서가 처리된 상태에서 실행이 성공했다고 표시되면 인덱서가 기본 데이터 원본에서 새롭거나 변경된 행 또는 Blob을 찾지 못했음을 의미합니다.

변경 내용 감지 논리는 데이터 플랫폼에 기본 제공됩니다. 인덱서가 변경 감지를 지원하는 방법은 데이터 원본에 따라 다릅니다.

인덱서는 내부 상위 워터 마크를 통해 데이터 원본에서 처리한 마지막 문서를 추적합니다. 마커는 API에서 노출되지 않지만 내부적으로 인덱서는 중지된 위치를 추적합니다. 예약된 실행이나 주문형 호출을 통해 인덱싱이 다시 시작되면 인덱서는 중지된 부분을 선택할 수 있도록 상위 워터마크를 참조합니다.

전체를 다시 인덱싱하기 위해 상위 워터마크를 지워야 하는 경우 인덱서 다시 설정을 사용할 수 있습니다. 보다 선별적으로 인덱스를 다시 생성하려면 기술 초기화 또는 문서 초기화를 사용합니다. 다시 설정 API를 통해 내부 상태를 지울 수 있으며 증분 보강를 사용하도록 설정한 경우 캐시를 플러시할 수도 있습니다. 각 다시 설정 옵션의 배경 및 비교에 대한 자세한 내용은 인덱서, 기술 및 문서 실행 또는 다시 설정을 참조하세요.