Elasticsearch は、複雑な集計クエリ、高カーディナリティの用語クエリ、ベクトル検索などのシナリオでパフォーマンスボトルネックが発生することがあります。FalconSeek クラウドネイティブカーネルは、Alibaba が開発した Havenask エンジンをベースにしています。C++ のカラムナメモリと完全非同期フレームワークを使用し、Elasticsearch エコシステムとの互換性を維持しながらクエリパフォーマンスを向上させます。このトピックでは、インスタンスの作成、インデックスレベルの設定、クエリ実行戦略の管理など、デフォルトのクエリの高速化のために FalconSeek を有効にする方法について説明します。
適用範囲
FalconSeek を有効にする前に、次の点にご注意ください。
プレビューステータス: FalconSeek は現在、招待制の限定無料プレビュー期間中です。
バージョン要件: FalconSeek を使用するには、Elasticsearch 8.17.0 または 9.4.0 が必要です。
新しいインスタンス: バージョン 8.17.0 または 9.4.0 のインスタンスを購入する際に、直接 FalconSeek を有効にできます。
既存のインスタンス: バージョン 8.17.0 または 9.4.0 の既存のインスタンスの場合、コンソールにログインし、インスタンスの 基本情報 ページを開きます。エンジンカーネル セクションで、設定変更 をクリックして FalconSeek を有効または無効にできます。
インスタンスの作成と FalconSeek の有効化
既存のインスタンスで FalconSeek を有効にする方法については、「適用範囲」セクションをご参照ください。新しいインスタンスを設定するには、次の手順を実行してください。
インスタンスの 購入 ページで、FalconSeek を有効にします。
Elasticsearch バージョン:8.17.0 または 9.4.0 を選択します。
[Advanced Enhanced Features]:FalconSeek クラウドネイティブカーネル を選択します。
ビジネス要件に基づいて、VPC や インスタンスタイプ などの他のパラメーターを設定し、支払いを完了します。
インスタンスが作成されたら、Kibana コンソールで次のコマンドを実行して、クラスターレベルで FalconSeek が有効になっていることを確認します。
GET _cluster/settings?include_defaults&filter_path=defaults.havenask.engine.enabledレスポンスの enabled フィールドが true の場合、次の例に示すように、機能が有効になっています。
{
"defaults": {
"havenask": {
"engine": {
"enabled": "true"
}
}
}
}インデックスでの FalconSeek の使用
インスタンスで FalconSeek を有効にしても、デフォルトではどのインデックスにも適用されません。高速化したい各インデックスに対して、インデックス設定を使用して FalconSeek エンジンを明示的に有効にする必要があります。このセクションのコマンドは、Kibana コンソールで実行できます。
新しいインデックスでの FalconSeek の有効化
インデックスを作成する際に、
"index.havenask.engine.enabled": trueパラメーターをsettingsに追加して FalconSeek を有効にします。PUT falcon_seek_test { "settings": { "index.havenask.engine.enabled": true }, "mappings": { "properties": { "foo": { "type": "keyword" } } } }インデックスにデータを書き込みます。
POST falcon_seek_test/_bulk {"index":{}} {"foo":"hello"} {"index":{}} {"foo":"world"} {"index":{}} {"foo":"cpp"} {"index":{}} {"foo":"java"}データをクエリします。デフォルトでは、FalconSeek が使用されます。
GET falcon_seek_test/_search
{
"query": {
"term":{
"foo":{
"value": "hello"
}
}
},
"sort": [
{
"_doc": {
"order": "desc"
}
}
]
}既存のインデックスでの FalconSeek の有効化
このシナリオでは、インデックスはすでに存在し、作成時には FalconSeek が有効になっていませんでした。次のコマンド例ではインデックスを作成するだけで、高速化は有効にしません。
PUT my_existing_index { "settings": { "number_of_shards": 5, "number_of_replicas": 1 }, "mappings": { "properties": { "foo": { "type": "keyword" } } } }_settingsAPI を使用してインデックス設定を更新し、FalconSeek を動的に有効にします。PUT my_existing_index/_settings { "index.havenask.engine.enabled": true }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 戦略を使用しており、特定のクエリを Elasticsearch ネイティブエンジンで実行したい場合は、次のいずれかの方法で havenask_search_type パラメーターをクエリリクエストに追加してください。
方法 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 クラウドネイティブカーネルは、Elasticsearch の基盤となる Lucene コンポーネントの一部を、高度に最適化された C++ エンジンに置き換えます。クエリリクエストを送信すると、リクエストはまず FalconSeek プラグインレイヤーに到達します。プラグインレイヤーは、クエリが FalconSeek エンジンによって効率的に処理できるかどうかを判断します。
サポートされているクエリ:リクエストは高性能な FalconSeek エンジンに転送されて実行されます。
サポートされていないクエリ:設定した戦略に基づき、システムは自動的に Elasticsearch ネイティブエンジンにフォールバックしてクエリを実行するか、例外を返します。
よくある質問
Q:既存の Elasticsearch インスタンスで FalconSeek を有効にできますか?
A:状況によります。バージョン 8.17.0 または 9.4.0 のインスタンス (既存のインスタンスを含む) の場合、インスタンスの 基本情報 ページを開きます。エンジンカーネル セクションで、設定変更 をクリックして FalconSeek を有効にできます。既存のインスタンスがどちらのバージョンでもない場合、FalconSeek を直接有効にすることはできません。バージョン 8.17.0 または 9.4.0 の新しいインスタンスを購入し、Data Transmission Service (DTS) や Logstash などのツールを使用してデータを新しいインスタンスに移行してください。詳細については、「移行方法の選択」をご参照ください。
Q:FalconSeek がサポートしていないクエリを実行するとどうなりますか?
A:クエリ実行戦略によって異なります。デフォルトの native 戦略では、クエリは自動的に Elasticsearch ネイティブエンジンにフォールバックします。正しい結果は得られますが、FalconSeek によるクエリの高速化のメリットは得られません。native-direct 戦略では、システムはエラーメッセージを返します。