Azure

[Azure] AI Search - Document 다루기

비번변경 2024. 12. 26. 17:54

개요

2024.12.09-[Azure] AI Search - Index 다루기에서 Azure Python SDK를 사용해 AI Search 서비스의 Index를 다루는 방법을 정리했다. 이번에는 Index에서 데이터에 해당하는 Document를 다루는 방법을 정리한다.

 

클라이언트 생성

Index에 Document를 저장하거나 삭제하는 등의 작업을 수행하기 위해서는 SearchClient가 필요하다.

(인덱스를 다루기 때문에 SearchIndexClient랑 헷갈리는데, SearchClient이다.)

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

service_endpoint = os.environ["AZURE_SEARCH_SERVICE_ENDPOINT"]
index_name = os.environ["AZURE_SEARCH_INDEX_NAME"]
key = os.environ["AZURE_SEARCH_API_KEY"]

search_client = SearchClient(service_endpoint, index_name, AzureKeyCredential(key))

 

Document 추가

upload_documents

Index에 Document를 추가할 때는 upload_documents 함수를 사용한다. Document는 여러 개 전달할 수 있다.

document의 키를 기준으로, 인덱스에 없는 document를 업로드하면 document가 추가되고, 인덱스에 있는 document를 업로드하면 document가 갱신된다.

DOCUMENT = {
       "category": "Hotel",
       "hotelId": "1000",
       "rating": 4.0,
       "rooms": [],
       "hotelName": "Azure Inn",
   }

   result = search_client.upload_documents(documents=[DOCUMENT])

   print("Upload of new document succeeded: {}".format(result[0].succeeded))

 

또는 아래와 같이  merge_or_upload_documents 함수를 사용할 수도 있다.

merge_documents 함수는 함수로 전달한 document를 기존 문서에 병합한다. 기존 document가 없으면 병합되지 않지만, merge_or_upload_documents를 사용하면 기존 document가 없을 때 document가 추가되는 방식으로 동작한다.

result = search_client.merge_or_upload_documents(documents=[{"hotelId": "1000", "rating": 4.5}])

print("Merge into new document succeeded: {}".format(result[0].succeeded))

 

Document 조회

get_document 함수에 document의 키를 전달하여 문서 정보를 확인할 수 있다.

result = search_client.get_document(key="23")

print("Details for hotel '23' are:")
print("        Name: {}".format(result["hotelName"]))
print("      Rating: {}".format(result["rating"]))
print("    Category: {}".format(result["category"]))

다만 여러 document를 한 번에 확인할 수는 없는 것 같다.

 

Document 삭제

delete_documents 함수는 document 키를 기준으로 document를 삭제한다. 참고로 삭제 시도한 document가 Index에 저장되어 있지 않은 상태라도 에러 없이 동작한다. 

result = search_client.delete_documents(documents=[{"hotelId": "1000"}])

 

참고 문서

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