Azure AI 검색에서 여러 언어에 대한 인덱스 만들기

여러 언어로 된 문자열이 있는 경우 인덱싱 및 쿼리 실행 중에 특정 언어의 언어 규칙을 사용하여 문자열을 분석하는 언어 분석기를 연결할 수 있습니다. 언어 분석기를 사용하면 문자 변형, 문장 부호 및 단어 어근 형태를 더 잘 처리할 수 있습니다.

Azure AI 검색은 Microsoft 및 Lucene 분석기를 지원합니다. 기본적으로 검색 엔진은 언어에 구애받지 않는 표준 Lucene을 사용합니다. 테스트 결과 기본 분석기가 부족한 것으로 나타나면 이를 언어 분석기로 바꿉니다.

Azure AI 검색에서 여러 언어를 지원하는 두 가지 패턴은 다음과 같습니다.

  • 모든 영숫자 콘텐츠가 동일한 언어로 되어 있고 검색 가능한 모든 문자열 필드가 동일한 언어 분석기를 사용하도록 특성이 지정된 언어별 인덱스를 만듭니다.

  • 각 필드의 언어별 버전(예: description_en, description_fr, description_ko)으로 혼합 인덱스를 만든 다음 쿼리 시간에 해당 필드로만 전체 텍스트 검색을 제한합니다. 이 접근 방식은 설명과 같은 몇 가지 필드에만 언어 변형이 필요한 시나리오에 유용합니다.

이 문서에서는 혼합 인덱스에서 언어별 필드를 구성하고 쿼리하는 단계와 모범 사례에 중점을 둡니다.

  • 각 언어 변형에 대한 문자열 필드를 정의합니다.
  • 각 필드에 언어 분석기를 설정합니다.
  • 쿼리 요청에서 특정 필드로 searchFields 매개 변수를 설정한 다음, select를 사용하여 호환되는 콘텐츠가 있는 필드만 반환합니다.

참고 항목

RAG(검색 증강 생성) 패턴에서 대규모 언어 모델을 사용하는 경우 번역된 문자열을 반환하도록 프롬프트를 설계할 수 있습니다. 해당 시나리오는 이 문서의 범위를 벗어납니다.

필수 조건

언어 분석은 searchable이고 현지화된 텍스트를 포함하는 Edm.String 형식의 필드에 적용됩니다. 텍스트 번역도 필요한 경우 다음 섹션을 검토하여 AI 보강이 요구 사항을 충족하는지 확인합니다.

문자열이 아닌 필드와 검색할 수 없는 문자열 필드는 어휘 분석을 거치지 않으며 토큰화되지 않습니다. 대신, 그대로 저장되고 반환됩니다.

텍스트 번역 추가

이 문서에서는 번역된 문자열이 이미 존재한다고 가정합니다. 그렇지 않은 경우 Azure AI 서비스를 보강 파이프라인에 연결하여 인덱싱 중에 텍스트 번역을 호출할 수 있습니다. 텍스트 번역은 인덱서 기능과 Azure AI 서비스에 종속되지만 모든 설정은 Azure AI 검색 내에서 수행됩니다.

텍스트 번역을 추가하려면 다음 단계를 수행합니다.

  1. 콘텐츠가 지원되는 데이터 원본에 있는지 확인합니다.

  2. 콘텐츠를 가리키는 데이터 원본을 만듭니다.

  3. 텍스트 번역 기술을 포함하는 기술 세트를 만듭니다.

    텍스트 번역 기술은 단일 문자열을 입력으로 사용합니다. 필드가 여러 개 있는 경우 각 필드에 대해 한 번씩 텍스트 번역을 여러 번 호출하는 기술 세트를 만들 수 있습니다. 또는 텍스트 병합기 기술을 사용하여 여러 필드의 콘텐츠를 하나의 긴 문자열로 통합할 수 있습니다.

  4. 번역된 문자열에 대한 필드를 포함하는 인덱스를 만듭니다. 이 문서의 대부분은 다국어 콘텐츠 인덱싱 및 쿼리를 위한 인덱스 디자인 및 필드 정의를 다룹니다.

  5. 기술 세트에 다중 지역 Azure AI 서비스 리소스를 연결합니다.

  6. 인덱서를 만들고 실행한 다음, 이 문서의 지침을 적용하여 관심 있는 필드만 쿼리합니다.

텍스트 번역은 데이터 가져오기 마법사에 기본 제공됩니다. 번역하려는 텍스트가 포함된 지원되는 데이터 원본이 있는 경우 코드를 작성하기 전에 마법사를 단계별로 실행하여 언어 감지 및 번역 기능을 사용해 볼 수 있습니다.

콘텐츠 필드를 다양한 언어로 정의

Azure AI 검색에서 쿼리는 단일 인덱스를 대상으로 합니다. 단일 검색 환경에서 언어별 문자열을 제공하려는 개발자는 일반적으로 값을 저장하는 전용 필드(영어 문자열 필드 하나, 프랑스 문자열 필드 하나 등)를 정의합니다.

필드 정의의 analyzer 속성은 언어 분석기를 설정하는 데 사용됩니다. 인덱싱과 쿼리 실행 모두에 사용됩니다.

{
  "name": "hotels-sample-index",
  "fields": [
    {
      "name": "Description",
      "type": "Edm.String",
      "retrievable": true,
      "searchable": true,
      "analyzer": "en.microsoft"
    },
    {
      "name": "Description_fr",
      "type": "Edm.String",
      "retrievable": true,
      "searchable": true,
      "analyzer": "fr.microsoft"
    }
  ]
}

인덱스 빌드 및 로드

중간 단계는 쿼리를 공식화하기 전에 인덱스를 작성하고 채우는 것입니다. 이 단계는 완전성을 위해 언급하는 것입니다. 인덱스 가용성을 확인하는 한 가지 방법은 포털의 인덱스 목록을 확인하는 것입니다.

쿼리 제한 및 결과 자르기

쿼리의 매개 변수는 검색을 특정 필드로 제한한 다음 시나리오에 도움이 되지 않는 필드의 결과를 자르는 데 사용됩니다.

매개 변수 목적
searchFields 전체 텍스트 검색을 명명된 필드 목록으로 제한합니다.
select 지정하는 필드만 포함하도록 응답을 잘라냅니다. 기본적으로 검색 가능한 모든 필드가 반환됩니다. select 매개 변수를 사용하면 반환할 매개 변수를 선택할 수 있습니다.

프랑스어 문자열이 포함된 필드로 검색을 제한하려는 목표가 있는 경우 searchFields를 사용하여 해당 언어의 문자열이 포함된 필드를 쿼리 대상으로 지정합니다.

쿼리 요청에 분석기를 지정할 필요는 없습니다. 필드 정의의 언어 분석기는 쿼리 실행 중에 텍스트 분석을 결정합니다. 여러 필드를 할당하고 각각 서로 다른 언어 분석기를 호출하는 쿼리의 경우 용어 또는 구는 각 필드에 할당된 분석기에 의해 동시에 처리됩니다.

기본적으로 검색은 검색 가능으로 표시된 모든 필드를 반환합니다. 따라서 제공하려는 언어별 검색 환경을 따르지 않는 필드는 제외하려고 할 수 있습니다. 특히 프랑스어 문자열이 있는 필드로 검색을 제한하면 영어 문자열이 있는 필드를 결과에서 제외할 수 있습니다. select 쿼리 매개 변수를 사용하면 호출 애플리케이션에 반환되는 필드를 제어할 수 있습니다.

REST 예제

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-07-01
{
    "search": "animaux acceptés",
    "searchFields": "Tags, Description_fr",
    "select": "HotelName, Description_fr, Address/City, Address/StateProvince, Tags",
    "count": "true"
}

C# 예제

private static void RunQueries(SearchClient srchclient)
{
    SearchOptions options;
    SearchResults<Hotel> response;

    options = new SearchOptions()
    {
        IncludeTotalCount = true,
        Filter = "",
        OrderBy = { "" }
    };

    options.Select.Add("HotelId");
    options.Select.Add("HotelName");
    options.Select.Add("Description_fr");
    options.SearchFields.Add("Tags");
    options.SearchFields.Add("Description_fr");

    response = srchclient.Search<Hotel>("*", options);
    WriteDocuments(response);
}

언어별 필드 기능 향상

간혹 쿼리를 실행한 에이전트의 언어를 알지 못할 수 있습니다. 이 경우 모든 필드에 대해 동시에 쿼리를 실행할 수 있습니다. 평가 프로필을 사용하여 특정 언어로 된 결과에 대한 우선 순위를 정의할 수 있습니다. 아래 예에서는 프랑스어 설명에서 찾은 일치 항목이 다른 언어 항목 일치보다 상대적으로 높은 점수를 받게 됩니다.

  "scoringProfiles": [
    {
      "name": "frenchFirst",
      "text": {
        "weights": { "description_fr": 2 }
      }
    }
  ]

그런 다음, 검색 요청에 점수 매기기 프로필을 포함합니다.

POST /indexes/hotels/docs/search?api-version=2024-07-01
{
  "search": "pets allowed",
  "searchFields": "Tags, Description_fr",
  "select": "HotelName, Tags, Description_fr",
  "scoringProfile": "frenchFirst",
  "count": "true"
}

다음 단계