Azure

[Azure] AI Search - 인덱스

비번변경 2024. 11. 28. 10:11

개요

2024.10.29-[Azure] AI Search 란에서 Azure의 AI Search라는 서비스가 검색 서비스를 만들 수 있는 인프라와 도구를 제공하는 PaaS라는 것을 알았다.

이번 글에서는 AI Search 서비스의 기본 개념인 인덱스에 대해서 알아보려고 한다.

 

 

인덱스

인덱스는 인덱싱, 전체 텍스트 검색, 벡터 검색, 하이브리드 검색 및 필터링된 쿼리를 수행하는 검색 엔진에서 사용할 수 있는 검색 가능한 콘텐츠이다. 쉽게 말해 데이터를 구조화해서 검색할 수 있게 만든 데이터의 목록이라고 할 수 있다. 데이터를 구조화해서 저장하는 핵심 개념으로, 빠르고 정확하게 데이터를 검색하는 것을 목적으로 한다.

일반적으로 데이터베이스의 테이블에 많이 비유된다.

 

인덱스는 크게 데이터 구조를 정의하는 Schema와 검색에 필요한 데이터, 즉 인덱싱 데이터에 해당하는 Documents로 이루어져 있다. Documents는 원본 데이터가 아니라 데이터 사본으로, 검색에 필요한 핵심 정보를 저장한다.

참고로 인덱스는 데이터를 정리하여 저장한 공간이기 때문에 데이터 원본 시스템 내 데이터에 변경이 발생하면 변경 사항이 인덱스에 반영될 수 있도록 새로 인덱싱해야 한다.

 

 

Schema

인덱싱 데이터의 구조를 정의한다. 

데이터베이스 테이블의 컬럼에 해당하는 fields로 이루어져 있고, 각 fields는 이름과 데이터 타입, 사용 방법을 결정하는 특성들로 구성되어 있다. 아래 JSON 문서는 Schema를 나타낸 것이다.

{
  "name": "name_of_index, unique across the service",
  "fields": [
    {
      "name": "name_of_field",
      "type": "Edm.String | Collection(Edm.String) | Collection(Edm.Single) | Edm.Int32 | Edm.Int64 | Edm.Double | Edm.Boolean | Edm.DateTimeOffset | Edm.GeographyPoint",
      "searchable": true (default where applicable) | false (only Edm.String and Collection(Edm.String) fields can be searchable),
      "filterable": true (default) | false,
      "sortable": true (default where applicable) | false (Collection(Edm.String) fields cannot be sortable),
      "facetable": true (default where applicable) | false (Edm.GeographyPoint fields cannot be facetable),
      "key": true | false (default, only Edm.String fields can be keys),
      "retrievable": true (default) | false,
      "analyzer": "name_of_analyzer_for_search_and_indexing", (only if 'searchAnalyzer' and 'indexAnalyzer' are not set)
      "searchAnalyzer": "name_of_search_analyzer", (only if 'indexAnalyzer' is set and 'analyzer' is not set)
      "indexAnalyzer": "name_of_indexing_analyzer", (only if 'searchAnalyzer' is set and 'analyzer' is not set)
      "normalizer":  "name_of_normalizer", (applies to fields that are filterable)
      "synonymMaps": "name_of_synonym_map", (optional, only one synonym map per field is currently supported)
      "dimensions": "number of dimensions used by an emedding models", (applies to vector fields only, of type Collection(Edm.Single))
      "vectorSearchProfile": "name_of_vector_profile" (indexes can have many configurations, a field can use just one)
    }
  ],
  "suggesters": [ ],
  "scoringProfiles": [ ],
  "analyzers":(optional)[ ... ],
  "charFilters":(optional)[ ... ],
  "tokenizers":(optional)[ ... ],
  "tokenFilters":(optional)[ ... ],
  "defaultScoringProfile": (optional) "...",
  "corsOptions": (optional) { },
  "encryptionKey":(optional){ },
  "semantic":(optional){ },
  "vectorSearch":(optional){ }
}

또한 자동 완성, 관련성 튜닝, 문자열 토큰 처리, 암호화 등등과 관련된 속성을 포함하고 있다.

 

 

Document

검색할 수 있는 데이터의 단위. 데이터베이스 테이블의 행에 비유된다.

Document의 구조는 Schema에 의해 결정되며, 원본 데이터의 구조화된 복사본이라고 할 수 있다. 

 

 

인덱스 생성 흐름도

아래 그림은 인덱스를 만드는 흐름도를 표현한 것이다. 

1. 데이터 원본 : pdf, 동영사, 이미지 등 원본 데이터가 저장되어 있는 저장소이다.

3. 문서 크래킹 : 파일에서 콘텐츠를 추출한다.

4. 보강 : 텍스트 번역, OCR, 감정 평가 등 추가 정보를 얻는다. 보강된 콘텐츠는 지식 저장소에 저장한다.

5. 인덱스 저장 : 직렬화한 JSON 데이터를 인덱스에 저장한다.

6. 결과 : 쿼리로 탐색할 수 있는 인덱스. 스키마와 여러 도큐먼트로 이루어져 있다.

 

* 인덱서 : 그림에서 2번에 해당하며, 데이터 수집 일부, 문서 크래킹과 보강 단계에서의 데이터 이동을 자동화한다. 데이터를 직렬화하는 작업도 수행한다. 

 

 

참고 문서

https://learn.microsoft.com/ko-kr/azure/search/search-what-is-an-index

https://microsoftlearning.github.io/mslearn-ai-fundamentals/Instructions/Labs/11-ai-search.html