エイリアスの利用

BLOG

1. 前書き

先日、ホワイトペーパー「Elasticsearchを使った簡易RAGアプリケーションの作成」(*脚注11) を公開いたしました。

今回から、ホワイトペーパーの中で紹介した技術的要素のうち、まだこのブログで紹介していなかったものを紹介していきたいと思います。

今回は、エイリアスです。

対象者

– Elastic Cloud のアカウントを持っている人(トライアルライセンスを含む)

– Elasticsearch の初心者~中級者

できるようになること

– Elasticsearch のインデックスに対するエイリアスを作成できる。

– Elasticsearch でエイリアスを使ったアクセスができる。

前提条件

– Elastic Cloud (version: 8.17.2)

(2025年02月27日時点の情報を元に記載しています。)

2. エイリアスとは?

エイリアスの意味は、直訳すれば「別名」です。

他のサービスでもエイリアスを利用できたりしますが、Elasticsearch でも、インデックスに対する「別名」を利用できます。

3. エイリアスの用途

エイリアスの用途はいくつかあります。

– 1. インデックスの実体が変更になっても、プログラムの修正なしに動作し続けられるようにする。

– 2. 検索対象のインデックスが複数にまたがっており、それらを統合して指定できるようにする。

– 3. データストリーム(*脚注22)において、読み込みは複数のインデックス、書き込みは1つのインデックスとする。

まずは、1番目の設定例を取り上げていきます。

4. エイリアスの設定

今回作成するエイリアスを、次のように設定します。

実体のインデックス名エイリアス名
momotaro_v3momotaro

ベクトル検索の準備 の回で momotaro_v3 という名前のインデックスを作成しました。

そのインデックスに対するエイリアスを momotaro とします。

※すでに momotaro という名前のインデックスがあった場合は、今回作成するエイリアスを “momotaro_alias” など他の名前にしてください。

5. エイリアスの作成

Elastic Cloud にログインし、Console から次のリクエストを発行します。

POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "momotaro_v3",
        "alias": "momotaro"
      }
    }
  ]
}

将来、momotaro_v4 インデックスを作成して、momotaro エイリアスの参照先を momotaro_v3 から momotaro_v4 に変更したい場合は、次のリクエストを発行します。

(まず、古いエイリアスを削除してから、新しいエイリアスを追加します。)

POST _aliases
{
  "actions": [
    {
      "remove": {
        "index": "momotaro_v3",
        "alias": "momotaro"
      }
    },
    {
      "add": {
        "index": "momotaro_v4",
        "alias": "momotaro"
      }
    }
  ]
}

6. エイリアスを使った検索

エイリアスを定義した後は、エイリアスを使って検索などを行うことができます。

GET /momotaro/_search
{
  "query": {
    "match_all": {}
  }
}

momotaroエイリアスに対して検索をリクエストすると、実際には、実体である momotaro_v3 インデックスに対して検索が行われます。

Python などからインデックスへアクセスする場合も、エイリアスを経由することでインデックスの実体が変更になってもプログラムを変更することなく動作し続けることが可能となります。

7. エイリアスの作成(その2)

複数インデックスを検索対象とし、書き込みインデックスを明示する場合のエイリアスの作成です。

こちらは、3.エイリアスの用途 の3番目に相当します。

複数のインデックスを検索対象にし、かつ、書き込みインデックスを明示したい場合は、次のように記述します。

“logs-“で始まる(複数の)インデックスを検索対象とし、”logs-202501” インデックスを書き込み対象とする場合の例

(エイリアス = “logs”)

POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "logs-*",
        "alias": "logs",
        "is_write_index": false
      }
    },
    {
      "add": {
        "index": "logs-202501",
        "alias": "logs",
        "is_write_index": true
      }
    }
  ]
}

このように logs エイリアスを作成することで、

GET /logs/_search
{
  ...
}

のような検索リクエストでは logs- で始まる複数のインデックスに対し検索を行い、

POST /logs/_doc
{
  ...
}

のようなドキュメント登録リクエストでは logs-202501 インデックスに対し、ドキュメントの登録を行います。

詳細は、Elasticsearch 公式ドキュメント内の Alias の説明(*脚注33)を参照してください。

8. 作成済のエイリアスの確認

クラスター内の全エイリアスを確認するには、次のリクエストを発行します。

GET _alias

特定のインデックスに対するエイリアスを確認するには、次のリクエストを発行します。

GET 調べたいインデックスの名前/_alias

詳細は、Elasticsearch 公式ドキュメント内の Alias の説明(*脚注3)を参照してください。

9. 注意点

エイリアスを作成した場合でも、下記のような API Key を作成時には、インデックス名を指定する必要があります。

例:

POST /_security/api_key
{
  "name": "my-api-key",
  "role_descriptors": {
    "role-a": {
      "cluster": ["all"],
      "indices": [
        {
          "names": ["index-a*"],
          "privileges": ["all"]
        }
      ]
    }
  }
}

上記内の “index-a*” の箇所には、エイリアスではなく、インデックス名を記載する必要があります。

API Key の作成方法については、Elasticsearch の公式ドキュメント内の API Key についての説明(*脚注44)を参照してください。

10. その他

条件付きのエイリアスなども作成可能です。

詳細は、Elasticsearch 公式ドキュメント内の Alias の説明(*脚注3)を参照してください。

11. まとめ

エイリアスを利用することにより、インデックスの実体が変更になってもプログラムの修正を行うことなく、動作し続けられることを紹介しました。

次回も、ホワイトペーパー内に記載した技術的要素を取り上げて、紹介したいと思います。


  1. ホワイトペーパー「Elasticsearchを使った簡易RAGアプリケーションの作成」は、2024年9月から2024年12月にかけて、当ブログ内で紹介した内容を再編したものです。
     概要:Elasticsearchのインデックス作成 ~ RAGアプリケーションの作成
    ホワイトペーパーは、以下のURLよりダウンロードできます。
    (ダウンロードするには、email アドレスなどの入力が必要です。)
    https://elastic.sios.jp/whitepaper/
    ↩︎
  2. データストリームについてはこれまで説明していませんが、ログなどのように日々増え続けていくデータを取り込むためのインデックスを指します。
    (ドキュメントがどんどん追加されていきますが、参照が多く、更新はほとんどないようなケース)
    詳細は、下記を参照願います。
    https://www.elastic.co/guide/en/elasticsearch/reference/current/data-streams.html
    ↩︎
  3. Elasticsearch 公式ドキュメント内の Alias の説明:
    https://www.elastic.co/guide/en/elasticsearch/reference/current/aliases.html
    ↩︎
  4. Elasticsearch の公式ドキュメント内の API Key についての説明:
    https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html
    ↩︎