インデックスエイリアス - Azure Cognitive Searchの新機能

Posted by johtani on Wednesday, May 18, 2022

目次

Azure Cognitive Searchで2月に新しい機能が公開されました。 「Index Alias」(インデックスの別名)です。まだ、パブリックプレビューの段階ですが、ドキュメントなどが公開されていたのでどんな機能かを調べてみました。なお、本ブログの内容は2022/05/18時点での内容となります、ご注意ください。

公式ドキュメント

まずは公式ドキュメントです。1つ目の「インデックスの別名を作成する」の冒頭で別名(エイリアス)がどんなものかを説明しています。

REST APIのドキュメント(2022/05/18現在、日本語のページだと左のメニューが壊れているため、どんなAPIがあるかがわかりにくいため、Alias Operationsのページは英語のリンクになっています)

インデックスエイリアスってどんなもの?

文字通り、インデックスにエイリアス(別名)をつけることができるようになります。 Azure Cognitive Searchでは残念ながらインデックスを作成するタイミング以外ではインデックスの名前を変更できません。 このため、インデックスのスキーマ(Analyzerの設定変更など)を変更したい場合、新しいインデックスを作成します。 新しいインデックスの名前はこれまでのものとは別の名前になってしまうため、アプリケーションで指定しているインデックス名も書き換える必要が出てきます。 利用しているアプリが複数ある場合は、すべて変更が必要です。

今回出てきたエイリアスを利用することで、アプリケーションではエイリアスを指定することで、アプリケーション側の変更なくインデックスを入れ替えることができるようになります。

エイリアスの操作方法

公式ドキュメントにAPIの一覧や利用方法の記載があるので詳細はそちらをご覧ください。 本ブログでは、いくつか利用するときに気になった点を書き残しておきます。

作成

aliasesというエンドポイントにエイリアスの名前とインデックス名をPOSTすることで作成できます。 以下のサンプルは公式ドキュメントの例です。

POST /aliases?api-version=2021-04-30-preview
{
    "name": "my-alias",
    "indexes": ["hotel-samples-index"]
}

ちなみに、インデックスの指定がindexesで配列になっていますが、公式ドキュメントに以下の記述があり、複数の指定はできないです(エラーが返ってきます)。

indexes 配列に指定できるインデックスの名前は 1 つだけです。

また、1つのインデックスに対して複数のエイリアスをつけることは問題ありません。

確認

エイリアスのリストも取得できます。

GET /aliases?api-version=2021-04-30-preview

現在どんなエイリアスが、どのインデックスに対して付与されているかがリストで取得できます。 きちんと作成されたかどうかなどの確認にも使えるかと思います(もちろんエイリアス名を指定したGETも可能です)

検索での利用

検索のREST APIでインデックス名を指定していた部分をエイリアス名に置き換えるだけです。

POST /indexes/my-alias/docs/search?api-version=2021-04-30-preview
{
    "search": "pool spa +airport",
    "searchMode": any,
    "queryType": "simple",
    "select": "HotelId, HotelName, Category, Description",
    "count": true
}

更新

エイリアスの更新(インデックスの入れ替え)は作成と同じリクエストです。 更新が成功すれば204のステータスコードが返ってきます(エイリアス初回作成時は201) なお、ドキュメントには以下のような記述があります。入れ替え時の注意点になるかと(入れ替えのタイミングをきちんと制御したい場合は、少しだけアプリケーションを停止するなどが必要かと思います)。

別名に対する更新がシステムに反映されるまでに最大 10 秒かかります。以前その別名が対応付けられていたインデックスを削除するのは、10 秒以上待ってからにしてください。

削除

もちろん削除もできます。

DELETE /aliases/my-alias

エイリアスを利用する場合の注意点

便利なエイリアスですが、エイリアスが使用できない場合もあるので注意が必要です。

  • データ登録のAPIと検索のAPIでのみエイリアス名を利用可能
    • インデックスの設定変更やAnalyze Text APIではこれまで通りインデックス名を指定します。
    • また、エイリアス名はインデクサー機能targetIndexNameにも指定できません。
  • エイリアス名がついているインデックスは削除不可
    • エイリアスがついているインデックスを削除しようとした場合はエラーが出るようになっています。
    • まずはエイリアスを削除してからインデックスを削除するという手順になります。

まとめ

簡単ですが、インデックスのエイリアスに関しての紹介でした。まだパブリックプレビューなので正式リリース時点では利用方法が変わっている可能性もあります。こちらは注意してください。

正式公開されればですが、今後Azure Cognitive Searchを使ったアプリを開発する場合はインデックスエイリアスを利用することを基本にするのがいいかもなと思います (ちなみに、Elasticsearchにもインデックスエイリアスの機能がありますが、異なる点が多いので同じものとは思わないほうがよさそうです)。


comments powered by Disqus