대/소문자를 구분하지 않는 필터링, 패싯 및 정렬에 대한 텍스트 정규화

Important

이 기능은 추가 사용 약관에 따라 공개 미리 보기로 제공됩니다. 미리 보기 REST API는 이 기능을 지원합니다.

Azure AI 검색에서 노멀라이저는 "필터링 가능", "패싯 가능" 또는 "정렬 가능"으로 표시된 필드에서 키워드 일치를 위해 텍스트를 사전 처리하는 구성 요소입니다. 텍스트 분석기와 쌍을 이루는 전체 텍스트 "검색 가능" 필드와 달리 필터 패싯 정렬 작업을 위해 만들어진 콘텐츠는 분석 또는 토큰화를 거치지 않습니다. 대/소문자 구분 및 문자 차이가 나타날 때 텍스트 분석을 생략하면 예기치 못한 결과가 발생할 수 있으므로 콘텐츠의 변형을 균질화하기 위해 노멀라이저가 필요한 이유입니다.

노멀라이저를 적용하면 결과를 개선하는 가벼운 텍스트 변환을 가져올 수 있습니다.

  • 일관된 대/소문자 구분(예: 모두 소문자 또는 대문자)
  • ö 또는 ê와 같은 악센트 및 분음 부호를 ASCII 해당 문자 "o" 및 "e"로 일반화합니다.
  • - 및 공백과 같은 문자를 사용자 지정 문자로 매핑합니다.

노멀라이저의 이점

검색 인덱스에서 문서를 쿼리하고 가져오려면 쿼리 입력을 문서 콘텐츠와 일치시켜야 합니다. "검색"을 호출하는 경우의 토큰화된 콘텐츠이거나 필터, 패싯 또는 orderby 작업을 요청하는 경우의 토큰화되지 않는 콘텐츠에 대해 일치해야 합니다.

토큰화되지 않은 콘텐츠도 분석되지 않기 때문에 콘텐츠의 작은 차이도 뚜렷하게 다른 값으로 평가됩니다. 다음 예를 살펴 보십시오.

  • $filter=City eq 'Las Vegas'는 정확한 텍스트 "Las Vegas"가 포함된 문서만 반환하고 "LAS VEGAS""las vegas"가 포함된 문서는 제외합니다. 이는 사용 사례에서 대/소문자에 관계없이 모든 문서가 필요한 경우에는 부적절합니다.

  • search=*&facet=City,count:5는 동일한 도시임에도 불구하고 "Las Vegas", "LAS VEGAS""las vegas"를 서로 다른 값으로 반환합니다.

  • search=usa&$orderby=City는 경우에 관계없이 동일한 도시를 함께 정렬하려는 의도인 경우에도 사전순("Las Vegas", "Seattle", "las vegas")으로 도시를 반환합니다.

인덱싱 및 쿼리 실행 중에 호출되는 노멀라이저는 필터, 패싯 및 정렬 시나리오에 대한 텍스트의 사소한 차이를 부드럽게 하는 간단한 변환을 추가합니다. 이전 예에서 "Las Vegas"의 변형은 보다 균일한 결과를 위해 선택한 노멀라이저에 따라 처리됩니다(예: 모든 텍스트는 소문자).

노멀라이저를 지정하는 방법

노멀라이저는 "filterable", "sortable" 또는 "facetable" 속성 중 하나 이상이 true로 설정된 텍스트 필드(Edm.StringCollection(Edm.String))의 필드별로 인덱스 정의에 지정됩니다. 노멀라이저 설정은 선택 사항이며 기본적으로 null입니다. 사용자 지정 노멀라이저를 구성하기 전에 미리 정의된 노멀라이저를 평가하는 것이 좋습니다.

노멀라이저는 인덱스에 새 필드를 추가할 때만 할당할 수 있으므로 가능한 경우 정규화 요구 사항을 미리 평가하고 인덱스 삭제 및 다시 만들기가 일상적인 개발 초기 단계에서 노멀라이저를 할당합니다.

  1. index에서 필드 정의를 만들 때 "normalizer" 속성을 다음 값 중 하나로 설정합니다. "lowercase"와 같은 미리 정의된 노멀라이저 또는 사용자 지정 노멀라이저(동일한 인덱스 스키마에 정의됨).

    "fields": [
     {
       "name": "Description",
       "type": "Edm.String",
       "retrievable": true,
       "searchable": true,
       "filterable": true,
       "analyzer": "en.microsoft",
       "normalizer": "lowercase"
       ...
     }
    ]
    
  2. 사용자 지정 노멀라이저는 인덱스의 "노멀라이저" 섹션에서 먼저 정의된 다음 이전 단계에 표시된 대로 필드 정의에 할당됩니다. 자세한 내용은 인덱스 만들기사용자 지정 Normalizers 추가를 참조하세요.

    "fields": [
     {
       "name": "Description",
       "type": "Edm.String",
       "retrievable": true,
       "searchable": true,
       "analyzer": null,
       "normalizer": "my_custom_normalizer"
     },
    

참고 항목

기존 필드의 노멀라이저를 변경하려면 완전히 인덱스를 다시 빌드합니다(개별 필드를 다시 빌드할 수는 없음).

인덱스를 다시 빌드하는 데 비용이 많이 드는 프로덕션 인덱스에 대한 좋은 해결 방법은 기존 필드와 동일하지만 새 Normalizers를 포함하는 새 필드를 만든 다음 기존 필드 대신 사용하는 것입니다. 인덱스 업데이트를 사용하여 새 필드를 통합하고 mergeOrUpload를 사용하여 새 필드를 채웁니다. 나중에 계획된 인덱스 서비스의 일환으로 인덱스를 정리하여 오래된 필드를 제거할 수 있습니다.

미리 정의 및 사용자 지정된 Normalizers

Azure AI 검색은 필요에 따라 사용자 지정하는 기능과 함께 일반적인 사용 사례에 대한 기본 제공 노멀라이저를 제공합니다.

범주 설명
미리 정의된 Normalizers 기본으로 제공되며 구성 없이 사용할 수 있습니다.
사용자 지정 노멀라이저1 고급 시나리오의 경우. char 및 token 필터로 구성된 기존 요소의 조합에 대한 사용자 정의 구성이 필요합니다.

(1) 노멀라이저는 항상 단일 토큰을 생성하므로 사용자 지정 Normalizers는 토크나이저를 지정하지 않습니다.

Normalizers 참조

미리 정의된 Normalizers

이름 설명 및 옵션
표준 asciifolding으로 뒤에 이어지는 텍스트 소문자로 바꿉니다.
소문자 문자를 소문자로 변환합니다.
대문자 문자를 대문자로 변환합니다.
asciifolding 기본 라틴어 유니코드 블록에 없는 문자를 해당하는 ASCII 값으로 변환합니다(해당 ASCII 값이 있는 경우). 예: àa로 변경
elision 토큰의 시작 부분에서 elision을 제거합니다.

지원되는 문자 필터

노멀라이저는 사용자 지정 분석기 문자 필터의 해당 항목과 동일한 두 가지 문자 필터를 지원합니다.

지원되는 토큰 필터

아래 목록은 노멀라이저에 지원되는 토큰 필터를 보여 주며 사용자 지정 분석기에서 사용되는 전체 토큰 필터의 하위 집합입니다.

사용자 지정 Normalizers 추가

사용자 지정 노멀라이저는 인덱스 스키마 내에서 정의됩니다. 정의에는 이름, 형식, 하나 이상의 문자 필터 및 토큰 필터가 포함됩니다. 문자 필터 및 토큰 필터는 사용자 지정 노멀라이저의 구성 요소이며 텍스트 처리를 담당합니다. 이러한 필터는 왼쪽에서 오른쪽으로 적용됩니다.

token_filter_name_1은 토큰 필터의 이름이고 char_filter_name_1char_filter_name_2는 문자 필터의 이름입니다(유효한 값은 아래의 지원되는 토큰 필터지원되는 문자 필터 표 참조).

"normalizers":(optional)[
   {
      "name":"name of normalizer",
      "@odata.type":"#Microsoft.Azure.Search.CustomNormalizer",
      "charFilters":[
         "char_filter_name_1",
         "char_filter_name_2"
      ],
      "tokenFilters":[
         "token_filter_name_1"
      ]
   }
],
"charFilters":(optional)[
   {
      "name":"char_filter_name_1",
      "@odata.type":"#char_filter_type",
      "option1": "value1",
      "option2": "value2",
      ...
   }
],
"tokenFilters":(optional)[
   {
      "name":"token_filter_name_1",
      "@odata.type":"#token_filter_type",
      "option1": "value1",
      "option2": "value2",
      ...
   }
]

사용자 지정 Normalizers는 인덱스를 만드는 중에 또는 나중에 기존 항목을 업데이트하여 추가할 수 있습니다. 기존 인덱스에 사용자 지정 노멀라이저를 추가하려면 "allowIndexDowntime" 플래그가 업데이트 인덱스에서 지정되어야 하며 이로 인해 해당 인덱스를 몇 초 동안 사용할 수 없게 됩니다.

사용자 지정 Normalizers 예제

아래 예에서는 해당하는 문자 필터 및 토큰 필터를 사용하는 사용자 지정 노멀라이저 정의를 보여 줍니다. 문자 필터 및 토큰 필더의 사용자 지정 옵션은 구문이라는 이름으로 별도로 지정된 다음 아래 설명된 대로 노멀라이저 정의에서 참조됩니다.

  • "my_custom_normalizer"라는 사용자 지정 노멀라이저는 인덱스 정의의 "normalizers" 섹션에 정의됩니다.

  • 노멀라이저는 두 개의 문자 필터와 세 개의 토큰 필터(elision, 소문자 및 사용자 지정된 asciifolding 필터 "my_asciifolding")로 구성됩니다.

  • 첫 번째 문자 필터 "map_dash"는 모든 대시를 밑줄로 바꾸고 두 번째 문자 "remove_whitespace"는 모든 공백을 제거합니다.

  {
     "name":"myindex",
     "fields":[
        {
           "name":"id",
           "type":"Edm.String",
           "key":true,
           "searchable":false,
        },
        {
           "name":"city",
           "type":"Edm.String",
           "filterable": true,
           "facetable": true,
           "normalizer": "my_custom_normalizer"
        }
     ],
     "normalizers":[
        {
           "name":"my_custom_normalizer",
           "@odata.type":"#Microsoft.Azure.Search.CustomNormalizer",
           "charFilters":[
              "map_dash",
              "remove_whitespace"
           ],
           "tokenFilters":[              
              "my_asciifolding",
              "elision",
              "lowercase",
           ]
        }
     ],
     "charFilters":[
        {
           "name":"map_dash",
           "@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
           "mappings":["-=>_"]
        },
        {
           "name":"remove_whitespace",
           "@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
           "mappings":["\\u0020=>"]
        }
     ],
     "tokenFilters":[
        {
           "name":"my_asciifolding",
           "@odata.type":"#Microsoft.Azure.Search.AsciiFoldingTokenFilter",
           "preserveOriginal":true
        }
     ]
  }

참고 항목