すべてのプロダクト
Search
ドキュメントセンター

Elasticsearch:FalconSeek を使用した Elasticsearch クエリの高速化

最終更新日:Jul 31, 2026

Elasticsearch は、複雑な集計クエリ、高カーディナリティの term クエリ、およびベクトル検索を処理する際に、パフォーマンスのボトルネックに直面することがあります。Alibaba 独自の Havenask エンジン上に構築された FalconSeek クラウドネイティブカーネルは、C++ カラムナメモリと完全非同期フレームワークを使用して、Elasticsearch エコシステムとの高い互換性を維持しながら、クエリパフォーマンスを大幅に向上させます。このトピックでは、インスタンスの作成、インデックスレベルおよびフィールドレベルの構成、クエリ戦略の管理、ベクトル検索などのパフォーマンスが重視されるシナリオでの最適化プラクティスを含め、デフォルトで FalconSeek を有効にしてクエリを高速化する方法について説明します。

適用範囲

  • 招待制の無料プレビュー:FalconSeek は現在、限定的な無料プレビュー段階にあります。

  • バージョン要件:この機能には、Elasticsearch バージョン 8.17.0 または 9.4.0 が必要です。

  • 新規インスタンス:バージョン 8.17.0 または 9.4.0 のインスタンスを購入する際に、直接 FalconSeek を有効にできます。

  • 既存のインスタンス: 既存のバージョン 8.17.0 または 9.4.0 のインスタンスでは、コンソールにログインしてインスタンスの 基本情報 ページに移動できます。 エンジンカーネル セクションで 設定変更 をクリックすると、FalconSeek を有効または無効にできます。

インスタンスの作成と FalconSeek の有効化

バージョン 8.17.0 または 9.4.0 のインスタンスを購入する際に、購入ページで直接 FalconSeek を有効にできます。既存のバージョン 8.17.0 または 9.4.0 のインスタンスで FalconSeek を有効にする方法については、上記の適用範囲をご参照ください。FalconSeek を使用して新しいインスタンスを作成するには、次の手順に従います。

  1. インスタンス購入ページで、FalconSeek を有効にします。

  2. Elasticsearch バージョン: 8.17.0 または 9.4.0 を選択します。

  3. 高度な拡張機能:FalconSeek クラウドネイティブカーネル を選択します。

  4. ビジネスニーズに応じて、VPC や インスタンスタイプ などの他のパラメーターを設定し、支払いを完了します。

  5. インスタンスが作成された後、Kibana コンソールで次のコマンドを実行して、FalconSeek がクラスターレベルで有効になっていることを確認します。

    GET _cluster/settings?include_defaults&filter_path=defaults.havenask.engine.enabled

    応答の enabled フィールドが true の場合、機能は正常に有効化されています。

    {
      "defaults": {
        "havenask": {
          "engine": {
            "enabled": "true"
          }
        }
      }
    }

インデックスでの FalconSeek の使用

デフォルトでは、FalconSeek はどのインデックスでも有効になっていません。高速化したい各インデックスに対して、明示的にエンジンを有効にする必要があります。

新規インデックスでの FalconSeek の有効化

  1. インデックスを作成する際に、settings に "index.havenask.engine.enabled": true を追加して FalconSeek を有効にします。

    PUT falcon_seek_test
    {
      "settings": {
        "index.havenask.engine.enabled": true    // FalconSeek 機能を有効にする
      },
      "mappings": {
        "properties": {
          "foo": {
            "type": "keyword"
          }
        }
      }
    }
  2. データを取り込みます。

    POST falcon_seek_test/_bulk
    {"index":{}}
    {"foo":"hello"}
    {"index":{}}
    {"foo":"world"}
    {"index":{}}
    {"foo":"cpp"}
    {"index":{}}
    {"foo":"java"}
  3. データをクエリします。デフォルトでは、クエリは FalconSeek を使用します。

    GET falcon_seek_test/_search
    {
      "query": {
        "term":{
          "foo":{
            "value": "hello"
          }
        }
      },
      "sort": [
        {
          "_doc": {
            "order": "desc"
          }
        }
      ]
    }

既存のインデックスでの FalconSeek の有効化

  1. 次のコマンドはインデックスを作成しますが、高速化は有効にしません。

    PUT my_existing_index
    {
      "settings": {
        "number_of_shards": 5,
        "number_of_replicas": 1
      },
      "mappings": {
        "properties": {
          "foo": {
            "type": "keyword"
          }
        }
      }
    }
  2. _settings API を使用してインデックス構成を更新し、FalconSeek を動的に有効にします。

    PUT my_existing_index/_settings
    {
      "index.havenask.engine.enabled": true
    }
  3. このシナリオで FalconSeek を有効にするには、まず POST /my_existing_index/_close を実行してインデックスを閉じ、次に POST /my_existing_index/_open を実行して再度開く必要があります。

クエリ実行戦略の管理

FalconSeek は、リクエストが FalconSeek によって処理されるか、Elasticsearch ネイティブエンジンにフォールバックするかを制御するための柔軟なクエリ実行戦略を提供します。これは、インデックスレベルで index.havenask.engine.search.type を使用するか、クエリごとに havenask_search_type を使用して構成します。クエリレベルのパラメーターが優先されます。

戦略

説明

推奨されるユースケース

native (デフォルト)

クエリはまず FalconSeek によって処理されます。サポートされていない構文や機能が検出された場合、リクエストは自動的に Elasticsearch ネイティブエンジンにフォールバックします。

パフォーマンスと互換性の両方が要求される一般的な本番ワークロード。

es

クエリを強制的に Elasticsearch ネイティブエンジンで実行させます。

パフォーマンス比較や、FalconSeek の未知の問題をバイパスするため。

native-direct

FalconSeek エンジンにクエリの実行を強制します。サポートされていない構文や機能が検出された場合、システムはフォールバックせずにエラーを返します。

デバッグ。

インデックスレベルのクエリ戦略の設定

次の例では、my_index 上のすべてのクエリがデフォルトで Elasticsearch ネイティブエンジンを使用するように構成します。

PUT my_index/_settings
{
  "index.havenask.engine.search.type": "es"
}

クエリごとの戦略の上書き

my_index がデフォルトで native 戦略を使用している場合、リクエストに havenask_search_type パラメーターを追加することで、特定のクエリを強制的に Elasticsearch ネイティブエンジンで実行させることができます。

  • 方法 1:URL パラメーターとして

    GET my_index/_search?havenask_search_type=es
    {
      "query": {
        "match_all": {}
      }
    }
  • 方法 2:リクエストボディのパラメーターとして

    GET my_index/_search
    {
      "query": {
        "match_all": {}
      },
      "havenask_search_type": "es"
    }

FalconSeek を使用したベクトル検索の高速化

FalconSeek は、既存の Elasticsearch インデックス構造の上に C++ ベースのベクトルインデックスを追加します。Alibaba が開発したこの独自のベクトルインデックスは、Taobao や Tmall での検索、推薦、逆画像検索など、Alibaba Group 全体のコアサービスを支えています。このパフォーマンス専有型のベクトルインデックスを使用して、逆画像検索やセマンティック検索などの効率的な AI アプリケーションを構築できます。

  1. ベクトルインデックスを作成します。mappings で、画像またはテキストベクトルを格納するために image_vector という名前の dense_vector 型のフィールドを定義します。このインデックスで FalconSeek が有効になっていることを確認してください。

    PUT vector_index
    {
      "settings": {
        "index.havenask.engine.enabled": true
      },
      "mappings": {
        "properties": {
          "image_vector": {
            "type": "dense_vector",
            "dims": 128 ,
            "index_options": {
              "type": "havenask_native"
            }
          },
          "title": {
            "type": "keyword"
          }
        }
      }
    }
  2. ベクトルデータを取り込みます。_bulk または _index API を使用してドキュメントを書き込みます。ベクトルフィールドの値は浮動小数点数の配列でなければなりません。

    POST vector_index/_bulk
    {"index":{"_id":"1"}}
    {"image_vector":[0.12, -0.05, 0.08, 0.24, -0.17, 0.31, 0.02, -0.19, 0.11, 0.28,
        -0.03, 0.15, 0.22, -0.11, 0.09, 0.33, -0.07, 0.14, 0.26, -0.21,
        0.18, 0.29, -0.13, 0.06, 0.35, -0.08, 0.16, 0.23, -0.15, 0.12, 
        0.27, -0.22, 0.19, 0.32, -0.14, 0.07, 0.25, -0.18, 0.13, 0.30,
        -0.09, 0.17, 0.24, -0.16, 0.10, 0.34, -0.10, 0.20, 0.31, -0.23,
        0.15, 0.28, -0.12, 0.11, 0.26, -0.19, 0.14, 0.29, -0.17, 0.08,
        0.22, -0.20, 0.16, 0.27, -0.15, 0.09, 0.25, -0.21, 0.18, 0.30,
        -0.13, 0.07, 0.24, -0.22, 0.19, 0.32, -0.16, 0.10, 0.26, -0.18,
        0.12, 0.28, -0.14, 0.06, 0.23, -0.19, 0.15, 0.29, -0.11, 0.05,
        0.21, -0.17, 0.13, 0.27, -0.10, 0.04, 0.20, -0.15, 0.11, 0.25,
        -0.09, 0.03, 0.19, -0.13, 0.10, 0.24, -0.08, 0.02, 0.18, -0.12,
        0.09, 0.23, -0.07, 0.01, 0.17, -0.11, 0.08, 0.22, 0.05, -0.06,
        0.09, 0.23, -0.07, 0.01, 0.17, -0.11, 0.08, 0.22],"title":"Image One"}
    {"index":{"_id":"2"}}
    {"image_vector":[0.12, -0.05, 0.08, 0.24, -0.17, 0.31, 0.02, -0.19, 0.11, 0.28,
        -0.03, 0.15, 0.22, -0.11, 0.09, 0.33, -0.07, 0.14, 0.26, -0.21,
        0.18, 0.29, -0.13, 0.06, 0.35, -0.08, 0.16, 0.23, -0.15, 0.12, 
        0.27, -0.22, 0.19, 0.32, -0.14, 0.07, 0.25, -0.18, 0.13, 0.30,
        -0.09, 0.17, 0.24, -0.16, 0.10, 0.34, -0.10, 0.20, 0.31, -0.23,
        0.15, 0.28, -0.12, 0.11, 0.26, -0.19, 0.14, 0.29, -0.17, 0.08,
        0.22, -0.20, 0.16, 0.27, -0.15, 0.09, 0.25, -0.21, 0.18, 0.30,
        -0.13, 0.07, 0.24, -0.22, 0.19, 0.32, -0.16, 0.10, 0.26, -0.18,
        0.12, 0.28, -0.14, 0.06, 0.23, -0.19, 0.15, 0.29, -0.11, 0.05,
        0.21, -0.17, 0.13, 0.27, -0.10, 0.04, 0.20, -0.15, 0.11, 0.25,
        -0.09, 0.03, 0.19, -0.13, 0.10, 0.24, -0.08, 0.02, 0.18, -0.12,
        0.09, 0.23, -0.07, 0.01, 0.17, -0.11, 0.08, 0.22, 0.05, -0.06,
        0.09, 0.23, -0.07, 0.01, 0.17, -0.11, 0.08, 0.22],"title":"Image Two"}
  3. k-NN ベクトル検索を実行します。knn クエリ句を使用して、指定されたベクトルに最も類似した上位 K 件の結果を見つけます。

     GET vector_index/_search
    {
      "knn": {
        "field": "image_vector",
        "query_vector": [0.12, -0.05, 0.08, 0.24, -0.17, 0.31, 0.02, -0.19, 0.11, 0.28,
        -0.03, 0.15, 0.22, -0.11, 0.09, 0.33, -0.07, 0.14, 0.26, -0.21,
        0.18, 0.29, -0.13, 0.06, 0.35, -0.08, 0.16, 0.23, -0.15, 0.12, 
        0.27, -0.22, 0.19, 0.32, -0.14, 0.07, 0.25, -0.18, 0.13, 0.30,
        -0.09, 0.17, 0.24, -0.16, 0.10, 0.34, -0.10, 0.20, 0.31, -0.23,
        0.15, 0.28, -0.12, 0.11, 0.26, -0.19, 0.14, 0.29, -0.17, 0.08,
        0.22, -0.20, 0.16, 0.27, -0.15, 0.09, 0.25, -0.21, 0.18, 0.30,
        -0.13, 0.07, 0.24, -0.22, 0.19, 0.32, -0.16, 0.10, 0.26, -0.18,
        0.12, 0.28, -0.14, 0.06, 0.23, -0.19, 0.15, 0.29, -0.11, 0.05,
        0.21, -0.17, 0.13, 0.27, -0.10, 0.04, 0.20, -0.15, 0.11, 0.25,
        -0.09, 0.03, 0.19, -0.13, 0.10, 0.24, -0.08, 0.02, 0.18, -0.12,
        0.09, 0.23, -0.07, 0.01, 0.17, -0.11, 0.08, 0.22, 0.05, -0.06,
        0.09, 0.23, -0.07, 0.01, 0.17, -0.11, -0.08,-0.22],
        "k": 10,
        "num_candidates": 100
      },
      "fields": ["title"]
    }

FalconSeek ベクトルインデックスの使用に関する詳細については、「FalconSeek ベクトルインデックスユーザーガイド」をご参照ください。

仕組み

FalconSeek クラウドネイティブカーネルは、Elasticsearch の基盤となる Lucene コンポーネントの一部を、高度に最適化された C++ エンジンに置き換えます。クエリを送信すると、FalconSeek プラグインレイヤーが、FalconSeek エンジンで処理できるかどうかを判断します。

  • サポートされているクエリ:リクエストは実行のために FalconSeek エンジンに転送されます。

  • サポートされていないクエリ:構成された戦略に応じて、クエリは自動的に Elasticsearch ネイティブエンジンにフォールバックするか、システムがエラーを返します。

このメカニズムにより、互換性を維持しながら高いパフォーマンスが保証されます。

よくある質問

Q:既存の Elasticsearch インスタンスで FalconSeek を有効にできますか?

A: 場合によります。バージョン 8.17.0 または 9.4.0 のインスタンス (既存のインスタンスを含む) の場合、基本情報 ページの エンジンカーネル セクションで 設定変更 をクリックして FalconSeek を有効にできます。既存のインスタンスがバージョン 8.17.0 または 9.4.0 でない場合、FalconSeek を直接有効にすることはできません。新しいバージョン 8.17.0 または 9.4.0 のインスタンスを購入し、Alibaba Cloud Data Transmission Service (DTS) または Logstash を使用して、新しいインスタンスにデータを移行する必要があります。詳細については、「移行方法の選択」をご参照ください。

Q:FalconSeek がサポートしていないクエリを実行するとどうなりますか?

A:クエリ実行戦略によって異なります。デフォルトの native モードでは、クエリは自動的に Elasticsearch ネイティブエンジンにフォールバックします。正しい結果は得られますが、FalconSeek によるパフォーマンスの高速化は適用されません。native-direct モードでは、システムはエラーを返します。