📝

AI Searchのインデックスを一括ダウンロード

2024/05/09に公開

やりたいこと

AI Searchでインデックスを作成して、想定通りのchunkができているのか気になったり、
既存システムの精度改善とかだと既存のインデックスの中身を確認したくなります。

Azure Portalからインデックスのjsonを一括ダウンロードできるのかなと思って、探したけど見つからなかったので、APIで叩くことにします。

タイトルと内容は違いますが、一括ダウンロードしたいけどできなかったから、API叩いてcsvにしたっていう話です。

使用するAPI

https://learn.microsoft.com/ja-jp/rest/api/searchservice/indexes/get?view=rest-searchservice-2023-11-01&tabs=HTTP

サンプルコード

AzureOpenAIにAI Searchのインデックスの中身を取得して、csvに保存するコードって聞いたら、
下記を出力してくれました。

import requests  
import csv  
  
# Azure Searchの設定  
service_name = 'your-service-name'  
api_key = 'your-api-key'  
index_name = 'your-index-name'  
api_version = '2021-04-30-Preview'  # 使用するAPIのバージョン  
  
# Search API URLの構築  
url = f'https://{service_name}.search.windows.net/indexes/{index_name}/docs/search?api-version={api_version}'  
  
# ヘッダーにAPIキーを設定  
headers = {  
    'Content-Type': 'application/json',  
    'api-key': api_key  
}  
  
# 検索クエリの設定  
# ここでは全ドキュメントを取得するために '*' を使用  
payload = {  
    "search": "*",  
    "select": "field1,field2,field3",  # 取得したいフィールド名を指定  
    "top": 1000  # 取得するドキュメントの最大数  
}  
  
# APIリクエストを送信  
response = requests.post(url, headers=headers, json=payload)  
response.raise_for_status()  # エラーがあれば例外を投げる  
  
# 応答からドキュメントを取得  
documents = response.json()  
  
# CSVファイルに保存  
csv_file = 'documents.csv'  
with open(csv_file, mode='w', newline='') as file:  
    writer = csv.writer(file)  
    # CSVのヘッダー  
    writer.writerow(['field1', 'field2', 'field3'])  
  
    # 各ドキュメントの情報をCSVに書き込む  
    for doc in documents.get('value', []):  
        field1 = doc.get('field1')  
        field2 = doc.get('field2')  
        field3 = doc.get('field3')  
        writer.writerow([field1, field2, field3])  
  
print(f'ドキュメントの一覧を {csv_file} に保存しました。')  
  • api_versionを2023-11-01に変更
  • 下記のクエリキーをapi_keyに変更

  • service_name、index_nameを変更
  • 取得したいフィールドを変更
  • topをドキュメント数の上限くらいに変更(1000が上限なので変更しなくてよい)
    ※ドキュメント数が1000を超える場合はskipを設定して回せば良い

クエリのパラメータについて

https://learn.microsoft.com/ja-jp/rest/api/searchservice/search-documents

まとめ

Export機能が追加されるまでのメモでした。

ヘッドウォータース

Discussion