Azure

[Azure] AI Search - Index 다루기

비번변경 2024. 12. 17. 12:07

개요

2024.11.01-[Azure] AI Search - 인덱스에서 인덱스의 개념을 알아보았었다. 이번 글에서는 Python Azure SDK를 사용해 인덱스를 생성하고 조회하는 등의 작업을 수행해보려고 한다.

 

AI Search 서비스 리소스는 이미 생성되어 있다고 가정한다.

 

 

Index 생성

Index는 SearchIndex라는 객체를 생성한 뒤, SearchIndexClient.create_or_update_index 메서드를 호출하여 생성할 수 있다.

 

먼저 아래 예시 코드와 같이 Index 스키마를 구성한다. 

from azure.core.credentials import AzureKeyCredential
from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents import SearchClient
from azure.search.documents.indexes.models import (
    ComplexField,
    SimpleField,
    SearchFieldDataType,
    SearchableField,
    SearchIndex
)

# Create a search schema
fields = [
        SimpleField(name="HotelId", type=SearchFieldDataType.String, key=True),
        SearchableField(name="HotelName", type=SearchFieldDataType.String, sortable=True),
        SearchableField(name="Description", type=SearchFieldDataType.String, analyzer_name="en.lucene"),
        SearchableField(name="Description_fr", type=SearchFieldDataType.String, analyzer_name="fr.lucene"),
        SearchableField(name="Category", type=SearchFieldDataType.String, facetable=True, filterable=True, sortable=True),
        SearchableField(name="Tags", collection=True, type=SearchFieldDataType.String, facetable=True, filterable=True),
        SimpleField(name="ParkingIncluded", type=SearchFieldDataType.Boolean, facetable=True, filterable=True, sortable=True),
        SimpleField(name="LastRenovationDate", type=SearchFieldDataType.DateTimeOffset, facetable=True, filterable=True, sortable=True),
        SimpleField(name="Rating", type=SearchFieldDataType.Double, facetable=True, filterable=True, sortable=True),
        ComplexField(name="Address", fields=[
            SearchableField(name="StreetAddress", type=SearchFieldDataType.String),
            SearchableField(name="City", type=SearchFieldDataType.String, facetable=True, filterable=True, sortable=True),
            SearchableField(name="StateProvince", type=SearchFieldDataType.String, facetable=True, filterable=True, sortable=True),
            SearchableField(name="PostalCode", type=SearchFieldDataType.String, facetable=True, filterable=True, sortable=True),
            SearchableField(name="Country", type=SearchFieldDataType.String, facetable=True, filterable=True, sortable=True),
        ])
    ]

scoring_profiles = []
suggester = [{'name': 'sg', 'source_fields': ['Tags', 'Address/City', 'Address/Country']}]

 

그리고 위에서 정의한 Index 스키마를 사용해 SearchIndex 객체를 생성한 후, SearchIndexClient.create_or_update_index를 호출하며 SearchIndex 객체를 전달한다.

credential = AzureKeyCredential(search_api_key)
index_client = SearchIndexClient(endpoint=search_endpoint, credential=credential)
index = SearchIndex(name=index_name, fields=fields, suggesters=suggester, scoring_profiles=scoring_profiles)
result = index_client.create_or_update_index(index)

 

 

조회

SearchIndexClient의 list_index_names 메서드 또는 get_index 메서드를 사용하여 인덱스의 이름 목록을 조회하거나 스키마를 조회할 수 있다.

 

- 인덱스 목록 조회

index_client = SearchIndexClient(endpoint=search_endpoint, credential=credential)
index_client.list_index_names()

 

- 인덱스 스키마 조회

index_client = SearchIndexClient(endpoint=search_endpoint, credential=credential)
result = index_client.get_index(name).as_dict()

 

 

삭제

SearchIndexClient의 delete_index 메서드로 이미 생성되어 있는 인덱스를 삭제할 수 있다.

index_client = SearchIndexClient(endpoint=search_endpoint, credential=credential)
index_client.delete_index(index_name)

 

 

 

참고 문서

https://learn.microsoft.com/ko-kr/python/api/azure-search-documents/azure.search.documents.indexes.searchindexclient?view=azure-python