호랭이 분석가

[Azure] Cognitive Search Index 생성, 삭제, 업로드 (Python) 본문

Azure/Cognitive Search

[Azure] Cognitive Search Index 생성, 삭제, 업로드 (Python)

데이터호랑이 2023. 7. 4. 20:39
반응형

Python을 이용하여 Azure Cognitive Search의 Indexes를 생성할 때,

사용할 수 있는 Class는 무엇이 있는지 알아보겠습니다.

 

 

Azure Cognitive Search client library for Python

Table of contents Azure Cognitive Search client library for Python - version 11.3.0 Article 09/06/2022 6 contributors Feedback In this article --> Azure Cognitive Search is a search-as-a-service cloud solution that gives developers APIs and tools for addin

learn.microsoft.com

 

0. 기본 준비

우선 Azure API를 이용하기 위한 Cognitive Search 생성 시 사용하면 서비스명과

발급받은 API Key를 준비하고 Client를 생성해야 합니다.

 

# pip install azure-search-documents

from azure.core.credentials import AzureKeyCredential
from azrue.search.documents.indexes import SearchIndexClient

search_service_name = 'your-service-name'
key = 'your-api-key'
endpoint = f'https://{serach_service_name}.search.windows.net/'

# 서비스 클라이언트를 생성
client = SearchIndexClient(endpoint, AzureKeyCredential(key))

1. 인덱스 생성

 

 

[Azure] Cognitive Search Index Field 종류

Python을 이용하여 Azure Cognitive Search의 Indexes를 생성할 때, 사용할 수 있는 Field Class는 무엇이 있는지 알아보겠습니다. azure.search.documents.indexes.SearchIndexClient class A client to interact with Azure search service

dataiger.tistory.com

 

인덱스를 생성할 때, 필드 타입과 데이터의 타입을 선택해야 하니 윗글을 참조하시면 됩니다.

아래의 코드로 샘플을 생성해 보겠습니다.

 

from azure.search.documents.indexes.models import (
    ComplexField,
    CorsOptions,
    SearchIndex,
    ScoringProfile,
    SearchFieldDataType,
    SimpleField,
    SearchableField
)

# 생성할 인덱스명 설정
index_name = 'test'
fields = [
        SimpleField(name="testId", type=SearchFieldDataType.String, key=True),
        SimpleField(name="testRate", type=SearchFieldDataType.Double),
        SearchableField(name="description", type=SearchFieldDataType.String)
    ]
    
cors_options = CorsOptions(allowed_origins=["*"], max_age_in_seconds=60)
scoring_profiles = []

index = SearchIndex(
    name=index_name,
    fields=fields,
    scoring_profiles=scoring_profiles,
    cors_options=cors_options)

result = client.create_index(index)

 

index_name을 만들 때 주의사항으로는 대문자와 특수문자는 사용 불가합니다 (ex : test_index, TestIndex)


2. 인덱스 삭제

 

삭제는 간단합니다. delete_index() 함수를 사용하여 삭제 가능합니다.

 

index = SearchIndex(
    name=name,
    fields=fields,
    scoring_profiles=scoring_profiles,
    cors_options=cors_options)

result = client.delete_index(index)

3. 데이터 업로드

 

우선 CSV(파일) 형태의 파일 데이터를 인덱스에 업로드하는 방법을 확인해 보겠습니다.

 

import pandas as pd

from azure.core.credentials import AzureKeyCredential
from azure.search.documents import SearchClient

# read CSV
data = pd.read_csv('your_file_name')

# 인덱스를 생성시 지정한 필드의 데이터타입으로 변환
data['testId'] = data['testId'].astype(str)
data['testRate'] = data['testRate'].astype(float)
data['description'] = data['description'].astype(str)

# 딕셔너리 변환
document = data.to_dict('records')

# 업로드
search_client = SearchClient(endpoint, index_name, AzureKeyCredential(key))
result = search_client.upload_documents(documents=document)

 

데이터프레임을 to_dict('records')를 통해 변환 시, List(Dict) 형태로 반환되므로 

result에는 바로 사용하였습니다만,

upload_documents(documents=[dict])의 형태로 입력되어야 합니다.

Comments