TairSearch は、Tair の社内全文検索データ構造であり、Elasticsearch (ES-LIKE) に似たクエリ構文を使用します。
概要
TairSearch は、次の特徴を提供します。
低レイテンシーとハイパフォーマンス: Tair の超高性能な計算能力に基づいて、ミリ秒レベルの書き込みと全文検索機能を提供します。 詳細については、「TairSearch パフォーマンスホワイトペーパー」をご参照ください。
増分および部分更新: フィールドの追加、更新、削除、自動インクリメントなど、インデックスの部分更新とドキュメントの増分更新をサポートします。
柔軟な構文: カスタムのソート順を提供し、bool、match、term、およびページングクエリを可能にする JSON 構文をサポートします。 この構文は Elasticsearch に似ています。
集約クエリ: terms、metrics、および filter 集約をサポートします。 詳細については、「集約」をご参照ください。
オートコンプリートサジェスト: プレフィックスによるあいまい検索と検索操作の自動補完をサポートします。
カスタムアナライザ: 英語 (Standard および Stop) や中国語 (Jieba および IK) などの主要な世界言語用の組み込みアナライザを含む、豊富で強力なアナライザを提供します。 また、ユーザー定義の辞書とストップワードを使用したカスタムアナライザもサポートしています。 詳細については、「検索アナライザ」をご参照ください。
シャードインデックスクエリ: TFT.MSEARCH コマンドを使用して複数のシャードインデックスを検索し、集約された結果セットを返すことができます。
ドキュメント圧縮: 圧縮されたドキュメントのストレージをサポートし、メモリ使用量を削減します。 この機能はデフォルトで無効になっています。
クエリキャッシュ: 最新のクエリ結果をキャッシュに保存して、ホットデータのクエリ効率を向上させます。
リリースノート
Redis 5.0 互換 DRAM ベースインスタンス
2022 年 3 月 11 日、Tair V1.7.27 とともに TairSearch がリリースされました。
2022 年 5 月 24 日、Tair V1.8.5 がリリースされ、TairSearch 集約機能のサポートが追加されました。
2022 年 9 月 6 日、Tair V5.0.15 がリリースされ、TFT.MSEARCH コマンドのサポートが追加されました。
2023 年 1 月 13 日、Tair V5.0.25 がリリースされ、アナライザのサポートが追加されました。
2023 年 3 月 15 日、Tair V5.0.28 がリリースされ、クエリキャッシュ、ドキュメント圧縮、および TFT.ANALYZER コマンドのサポートが追加されました。
2023 年 6 月 12 日、Tair V5.0.35 がリリースされ、ARRAY データ型のドキュメントと類似性ランキングアルゴリズム Okapi BM25 のサポートが追加されました。
Redis 6.0 互換 DRAM ベースインスタンス
2023 年 2 月 7 日、Tair V6.2.4.1 がリリースされ、TairSearch のサポートが追加されました。
Tair V6.2.4.1 は、Tair V5.0.25 の Redis 5.0 互換 DRAM ベースインスタンスが提供するすべての機能を備えています。
2023 年 3 月 14 日、Tair V6.2.5.0 がリリースされ、クエリキャッシュ、ドキュメント圧縮、および TFT.ANALYZER コマンドのサポートが追加されました。
Tair V6.2.5.0 は、Tair V5.0.28 の Redis 5.0 互換 DRAM ベースインスタンスが提供するすべての機能を備えています。
2023 年 6 月 12 日、Tair V6.2.7.3 がリリースされ、ARRAY データ型のドキュメントと類似性ランキングアルゴリズム Okapi BM25 のサポートが追加されました。
Tair V6.2.7.3 は、Tair V5.0.35 の Redis 5.0 互換 DRAM ベースインスタンスが提供するすべての機能を備えています。
2023 年 12 月 21 日、Tair V23.12.1.2 がリリースされ、TFT.EXPLAINSCORE コマンドのサポートが追加されました。
Redis 7.0 互換 DRAM ベースインスタンス
2024 年 7 月 22 日、Tair V24.7.0.0 がリリースされ、TairSearch のサポートが追加されました。
ベストプラ
前提条件
インスタンスは Tair メモリ最適化インスタンス であり、サポートされているバージョンは次のとおりです。
Redis 5.0 と互換性のある DRAM ベースのインスタンスの場合、マイナーバージョンは 1.7.27 以降である必要があります。
Redis 6.0 と互換性のある DRAM ベースのインスタンスの場合、マイナーバージョンは 6.2.4.1 以降である必要があります。
Redis 7.0 と互換性のある DRAM ベースのインスタンスの場合、すべてのマイナーバージョンがサポートされています。
最新のマイナーバージョンは、より多くの機能と高い安定性を提供します。 インスタンスを最新のマイナーバージョンに更新することをお勧めします。 詳細については、「インスタンスのマイナーバージョンを更新する」をご参照ください。 インスタンスがクラスターインスタンスまたは読み書き分離インスタンスである場合は、すべてのコマンドが期待どおりに実行されるように、インスタンスのプロキシノードを最新のマイナーバージョンに更新することをお勧めします。
注意事項
管理する TairSearch データは Tair インスタンスに保存されます。
メモリ使用量を削減するには、次の操作を実行することをお勧めします。
インデックスを作成するときは、ドキュメントフィールドの index を true に設定して、これらのフィールドをインデックスフィールドとして指定します。 他のドキュメントフィールドについては、index を false に設定します。
_source パラメーターに includes と excludes パターンの配列を含むオブジェクトを指定して、不要なドキュメントフィールドを除外し、必要なフィールドを保存します。
ドキュメントをトークンに分割する場合は、不要な分割やメモリ使用量の増加を防ぐために、適切なアナライザを選択してください。
ドキュメントが大きすぎる場合は、ドキュメント圧縮機能を使用してドキュメントを自動的に圧縮および解凍します。
単一のインデックスに多数のドキュメントを追加しないでください。 ドキュメントを複数のインデックスに追加してください。 クラスターインスタンスでのデータスキューを防ぎ、読み取りリクエストと書き込みリクエストのバランスを取り、large キーとホットキーの数を減らすために、インデックスあたりのドキュメント数を 500 万以内に保つことをお勧めします。
コマンドリスト
表 1. 全文検索コマンド
コマンド | 構文 | 説明 |
| インデックスとインデックスのマッピングを作成します。 マッピングを作成するための構文は、Elasticsearch で明示的なマッピングを作成するために使用される構文に似ています。 インデックスにドキュメントを追加する前に、インデックスを作成する必要があります。 | |
| 指定されたインデックスに properties フィールドを追加するか、インデックス設定を変更します。 | |
| インデックスのマッピング内容を取得します。 | |
| インデックスにドキュメントを追加します。 WITH_ID を使用して、インデックス内のドキュメントに一意の ID を指定できます。 ドキュメント ID がすでに存在する場合、既存の ID は上書きされます。 WITH_ID (デフォルト) を指定しない場合、ドキュメント ID は自動的に生成されます。 | |
| インデックスに複数のドキュメントを追加します。 各ドキュメントには、doc_id で指定されたドキュメント ID が必要です。 無効なフォーマットが原因でドキュメントの追加に失敗した場合、コマンドに含まれるすべてのドキュメントはインデックスに追加されません。 | |
| インデックス内の doc_id で指定されたドキュメントを更新します。 更新するドキュメントフィールドがマップされ、インデックスが付けられたフィールドである場合、フィールドはマッピングで使用されるものと同じ型である必要があります。 フィールドがインデックス付けされていないフィールドの場合、更新されるフィールドは任意のデータの型にすることができます。 説明 フィールドが既に存在する場合、ドキュメントは更新されます。 フィールドが存在しない場合、フィールドは追加されます。 ドキュメントが存在しない場合、ドキュメントは自動的に作成されます。 この場合、コマンドは TFT.ADDDOC と同等です。 | |
| インデックス内の doc_id で指定されたドキュメントから指定されたフィールドを削除します。 フィールドがインデックスフィールドの場合、フィールドの情報もインデックスから削除されます。 説明 指定されたフィールドが存在しない場合 (たとえば、_source によって除外されたフィールド)、操作は失敗します。 | |
| インデックス内の doc_id で指定されたドキュメントの指定されたフィールドに増分を追加します。 増分は正または負の整数にすることができます。 フィールドのデータの型は LONG または INTEGER のみです。 説明 ドキュメントが存在しない場合、ドキュメントは自動的に作成されます。 この場合、フィールドの既存の値は 0 であり、更新されたフィールド値は、既存のフィールド値に増分値を追加することによって取得されます。 フィールドが存在しない場合 (たとえば、_source によって除外された場合)、操作は失敗します。 | |
| インデックス内の doc_id で指定されたドキュメントの指定されたフィールドに増分を追加します。 増分は正または負の浮動小数点数にすることができます。 フィールドのデータの型は DOUBLE のみです。 説明 ドキュメントが存在しない場合、ドキュメントは自動的に作成されます。 この場合、フィールドの既存の値は 0 であり、更新されたフィールド値は、既存のフィールド値に増分値を追加することによって取得されます。 フィールドが存在しない場合 (たとえば、_source によって除外された場合)、操作は失敗します。 | |
| インデックス内の doc_id で指定されたドキュメントの内容を取得します。 | |
| doc_id で指定されたドキュメントがインデックスに存在するかどうかを確認します。 | |
| インデックス内のドキュメント数を取得します。 | |
| インデックス内のすべてのドキュメントの ID を取得します。 | |
| doc_id で指定されたドキュメントをインデックスから削除します。 複数のドキュメント ID を指定できます。 | |
| インデックスからすべてのドキュメントを削除しますが、インデックスは保持されます。 | |
| 指定されたアナライザのトークン化効果をクエリします。 | |
| クエリ文に基づいてインデックス内のドキュメントを検索します。 クエリ構文は Elasticsearch 構文に似ています。 | |
| クエリ句を使用して、mappings と settings が同じ値に設定されている複数のインデックス内のドキュメントをクエリし、これらのインデックスから結果を収集します。 その後、結果は評価、ソート、集約されて返されます。 | |
| クエリ文の実行時間をクエリします。 出力には、クエリに関与するドキュメントの数と、クエリ内の各操作で消費された時間が含まれます。 | |
| クエリ文の実行から得られるドキュメントの詳細なスコア情報をクエリします。 このコマンドを使用して、ドキュメントのスコアがどのように計算されるかのプロセスについての洞察を得ることができます。 その後、検索クエリを最適化して、ドキュメント取得の有効性を高めることができます。 | |
| ネイティブの Redis DEL コマンドを使用して、1 つ以上の TairSearch キーを削除できます。 |
表 2. オートコンプリートコマンド
コマンド | 構文 | 説明 |
| 指定されたインデックスに 1 つ以上のオートコンプリートテキストとその重みを追加します。 | |
| 指定されたインデックスから 1 つ以上のオートコンプリートテキストエントリを削除します。 | |
| 指定されたインデックス内のオートコンプリートテキストの数を取得します。 | |
| 指定されたプレフィックスに基づいて一致させることができるオートコンプリートテキストを取得します。 テキストは重みの降順で返されます。 | |
| 指定されたインデックス内のすべてのオートコンプリートテキストエントリを取得します。 |
次の一覧は、この Topic で使用されるコマンド構文の規則について説明しています。
大文字のキーワード: コマンドキーワードを示します。イタリック体のテキスト: 変数を示します。[options]: 囲まれたパラメーターがオプションであることを示します。 角括弧で囲まれていないパラメーターは指定する必要があります。A|B: 縦棒 (|) で区切られたパラメーターが相互排他的であることを示します。 パラメーターの 1 つだけを指定できます。...: この記号の前のパラメーターを繰り返し指定できることを示します。
TFT.CREATEINDEX
項目 | 説明 |
構文 |
|
コマンドの説明 | インデックスとインデックスのマッピングを作成します。 マッピングを作成するための構文は、Elasticsearch で明示的なマッピングを作成するために使用される構文に似ています。 インデックスにドキュメントを追加する前に、インデックスを作成する必要があります。 説明 large キーが生成されないように、大きなインデックスを小さなインデックスに分割し、負荷分散ルールを考案してデータを異なるインデックスに書き込むことができます。 インデックスを作成するときは、これらのインデックスの mappings パラメーターと settings パラメーターが同じ値に設定されていることを確認してください。 これらのインデックスが作成された後、TFT.MSEARCH を使用してクエリを実行できます。 |
パラメーター |
|
レスポンスパラメーター。 |
|
例 | コマンド例: 出力例: |
TFT.UPDATEINDEX
カテゴリ | 説明 |
構文 |
|
コマンドの説明 | 指定されたインデックスに properties フィールドを追加するか、インデックス設定を変更します。 |
パラメーター |
説明 mappings および settings の構文については、「TFT.CREATEINDEX」をご参照ください。 |
レスポンスパラメーター |
|
例 | コマンド例: 出力例: |
TFT.GETINDEX
カテゴリ | 説明 |
構文 |
|
コマンドの説明 | インデックスのマッピング内容を取得します。 |
パラメーター |
|
レスポンスパラメーター。 |
|
例 | コマンド例: 出力例: |
TFT.ADDDOC
項目 | 説明 |
構文 |
|
コマンドの説明 | インデックスにドキュメントを追加します。 WITH_ID を使用して、インデックス内のドキュメントに一意の ID を指定できます。 ドキュメント ID がすでに存在する場合、既存の ID は上書きされます。 WITH_ID (デフォルト) を指定しない場合、ドキュメント ID は自動的に生成されます。 |
パラメーター |
|
レスポンスパラメーター |
|
例 | サンプルコマンド: サンプル出力: 追加する配列の例: |
TFT.MADDDOC
カテゴリ | 説明 |
構文 |
|
コマンドの説明 | インデックスに複数のドキュメントを追加します。 各ドキュメントには、doc_id で指定されたドキュメント ID が必要です。 無効なフォーマットが原因でドキュメントの追加に失敗した場合、コマンドに含まれるすべてのドキュメントはインデックスに追加されません。 |
パラメーター |
|
レスポンスパラメーター。 |
|
例 | コマンド例: 出力例: |
TFT.UPDATEDOCFIELD
カテゴリ | 説明 |
構文 |
|
コマンドの説明 | インデックス内の doc_id で指定されたドキュメントを更新します。 更新するドキュメントフィールドがマップされ、インデックスが付けられたフィールドである場合、フィールドはマッピングで使用されるものと同じ型である必要があります。 フィールドがインデックス付けされていないフィールドの場合、更新されるフィールドは任意のデータの型にすることができます。 説明 フィールドが既に存在する場合、ドキュメントは更新されます。 フィールドが存在しない場合、フィールドは追加されます。 ドキュメントが存在しない場合、ドキュメントは自動的に作成されます。 この場合、コマンドは TFT.ADDDOC と同等です。 |
オプション |
|
レスポンスパラメーター。 |
|
例 | コマンド例: 出力例: |
TFT.DELDOCFIELD
カテゴリ | 説明 |
構文 |
|
コマンドの説明 | インデックス内の doc_id で指定されたドキュメントから指定されたフィールドを削除します。 フィールドがインデックスフィールドの場合、フィールドの情報もインデックスから削除されます。 説明 指定されたフィールドが存在しない場合 (たとえば、_source によって除外されたフィールド)、操作は失敗します。 |
オプション |
|
レスポンスパラメーター。 |
|
例 | コマンド例: 出力例: |
TFT.INCRLONGDOCFIELD
カテゴリ | 説明 |
構文 |
|
コマンドの説明 | インデックス内の doc_id で指定されたドキュメントの指定されたフィールドに増分を追加します。 増分は正または負の整数にすることができます。 フィールドのデータの型は LONG または INTEGER のみです。 説明 ドキュメントが存在しない場合、ドキュメントは自動的に作成されます。 この場合、フィールドの既存の値は 0 であり、更新されたフィールド値は、既存のフィールド値に増分値を追加することによって取得されます。 フィールドが存在しない場合 (たとえば、_source によって除外された場合)、操作は失敗します。 |
オプション |
|
レスポンスパラメーター。 |
|
例 | コマンド例: 出力例: |
TFT.INCRFLOATDOCFIELD
カテゴリ | 説明 |
構文 |
|
コマンドの説明 | インデックス内の doc_id で指定されたドキュメントの指定されたフィールドに増分を追加します。 増分は正または負の浮動小数点数にすることができます。 フィールドのデータの型は DOUBLE のみです。 説明 ドキュメントが存在しない場合、ドキュメントは自動的に作成されます。 この場合、フィールドの既存の値は 0 であり、更新されたフィールド値は、既存のフィールド値に増分値を追加することによって取得されます。 フィールドが存在しない場合 (たとえば、_source によって除外された場合)、操作は失敗します。 |
オプション |
|
レスポンスパラメーター。 |
|
例 | コマンド例: 出力例: |
TFT.GETDOC
カテゴリ | 説明 |
構文 |
|
コマンドの説明 | インデックス内の doc_id で指定されたドキュメントの内容を取得します。 |
オプション |
|
レスポンスパラメーター。 |
|
例 | コマンド例: 出力例: |
TFT.EXISTS
カテゴリ | 説明 |
構文 |
|
コマンドの説明 | doc_id で指定されたドキュメントがインデックスに存在するかどうかを確認します。 |
パラメーター |
|
レスポンスパラメーター。 |
|
例 | コマンド例: 出力例: |
TFT.DOCNUM
カテゴリ | 説明 |
構文 |
|
コマンドの説明 | インデックス内のドキュメント数を取得します。 |
パラメーター |
|
戻り値 |
|
例 | コマンド例: 出力例: |
TFT.SCANDOCID
カテゴリ | 説明 |
構文 |
|
コマンドの説明 | インデックス内のすべてのドキュメントの ID を取得します。 |
パラメーター |
|
レスポンスパラメーター。 |
|
例 | コマンド例: 出力例: |
TFT.DELDOC
項目 | 説明 |
構文 |
|
コマンドの説明 | doc_id で指定されたドキュメントをインデックスから削除します。 複数のドキュメント ID を指定できます。 |
パラメーター |
|
レスポンスパラメーター。 |
|
例 | コマンド例: 出力例: |
TFT.DELALL
カテゴリ | 説明 |
構文 |
|
コマンドの説明 | インデックスからすべてのドキュメントを削除しますが、インデックスは保持されます。 |
パラメーター |
|
レスポンスパラメーター。 |
|
例 | コマンド例: 出力例: |
TFT.ANALYZER
カテゴリ | 説明 |
構文 |
|
コマンドの説明 | 指定されたアナライザのトークン化効果をクエリします。 |
オプション |
|
レスポンスパラメーター。 |
|
例 | コマンド例: 出力例: |
TFT.SEARCH
カテゴリ | 説明 |
構文 |
|
コマンドの説明 | クエリ文に基づいてインデックス内のドキュメントを検索します。 クエリ構文は Elasticsearch 構文に似ています。 |
オプション | index はこのコマンドを実行して管理するインデックスの名前です。query は Elasticsearch で使用される構文に似た Query DSL 文です。 次のフィールドがサポートされています。
|
出力 |
|
例 | コマンド例: 出力例: |
TFT.MSEARCH
項目 | 説明 |
構文 |
|
コマンドの説明 | クエリ句を使用して、mappings と settings が同じ値に設定されている複数のインデックス内のドキュメントをクエリし、これらのインデックスから結果を収集します。 その後、結果は評価、ソート、集約されて返されます。 説明 TFT.MSEARCH コマンドの出力は、これらのインデックスからのクエリ結果を評価、ソート、集約した結果です。 出力は、複数のインデックスのデータセットを直接評価、ソート、集約して生成された結果とは異なります。 TFT.MSEARCH ポリシー:
|
パラメーター |
説明 TFT.SEARCH コマンドの query 文とは異なり、TFT.MSEARCH コマンドの query 文は from パラメーターをサポートしませんが、size、reply_with_keys_cursor、および keys_cursor パラメーターを使用してページングクエリをサポートします。 他のパラメーターの構文の詳細については、「TFT.SEARCH」をご参照ください。 |
レスポンスパラメーター。 |
|
例 | 事前に次のコマンドを実行します。 コマンド例: 応答例: 2 ページ目をクエリするコマンド例: 応答例: |
TFT.EXPLAINCOST
項目 | 説明 |
構文 |
|
コマンドの説明 | クエリ文の実行時間をクエリします。 出力には、クエリに関与するドキュメントの数と、クエリ内の各操作で消費された時間が含まれます。 |
オプション |
|
レスポンスパラメーター。 |
|
例 | コマンド例: 出力例: |
TFT.EXPLAINSCORE
カテゴリ | 説明 |
構文 |
|
コマンドの説明 | クエリ文の実行から得られるドキュメントの詳細なスコア情報をクエリします。 このコマンドを使用して、ドキュメントのスコアがどのように計算されるかのプロセスについての洞察を得ることができます。 その後、検索クエリを最適化して、ドキュメント取得の有効性を高めることができます。 このコマンドは、Redis 6.0 と互換性のある DRAM ベースのインスタンスでのみ使用できます。 |
パラメーター |
|
レスポンスパラメーター。 |
|
例 | コマンド例: 出力例: |
TFT.ADDSUG
カテゴリ | 説明 |
構文 |
|
コマンドの説明 | 指定されたインデックスに 1 つ以上のオートコンプリートテキストとその重みを追加します。 |
パラメーター |
|
レスポンスパラメーター |
|
例 | コマンド例: 出力例: |
TFT.DELSUG
カテゴリ | 説明 |
構文 |
|
コマンドの説明 | 指定されたインデックスから 1 つ以上のオートコンプリートテキストエントリを削除します。 |
パラメーター |
|
出力 |
|
例 | コマンド例: 出力例: |
TFT.SUGNUM
カテゴリ | 説明 |
構文 |
|
コマンドの説明 | 指定されたインデックス内のオートコンプリートテキストの数を取得します。 |
パラメーター |
|
レスポンスパラメーター。 |
|
例 | コマンド例: 出力例: |
TFT.GETSUG
カテゴリ | 説明 |
構文 |
|
コマンドの説明 | 指定されたプレフィックスに基づいて一致させることができるオートコンプリートテキストを取得します。 テキストは重みの降順で返されます。 |
パラメーター |
|
レスポンスパラメーター。 |
|
例 | コマンド例: 出力例: |
TFT.GETALLSUGS
カテゴリ | 説明 |
構文 |
|
コマンドの説明 | 指定されたインデックス内のすべてのオートコンプリートテキストエントリを取得します。 |
パラメーター |
|
レスポンスパラメーター。 |
|
例 | サンプルコマンド: 出力例: |
集約
TFT.SEARCH リクエストに aggs (または aggregations) 句を追加して、query 句の結果を集約できます。
使用方法
ほとんどの場合、aggs 句では、カスタム集約名、集約タイプ、および集約フィールド (field) を指定する必要があります。 numeric 型と keyword 型のフィールドのみがサポートされています。 例:
TFT.SEARCH shares '{"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Sum":{"sum":{"field":"purchase_price"}}}}'
# Jay_Sum を集約名、sum を集約タイプ、purchase_price を集約フィールドとして指定します。返される結果には、query からのクエリ結果と aggs からの集約結果が含まれます。
{"hits":{"hits":[{"_id":"16581351808123930","_index":"today_shares0718","_score":1.0,"_source":{"shares_name":"XAX","logictime":14300210,"purchase_type":1,"purchase_price":101.1,"purchase_count":100,"investor":"Jay"}},{"_id":"16581351809626430","_index":"today_shares0718","_score":1.0,"_source":{"shares_name":"XAX","logictime":14300310,"purchase_type":1,"purchase_price":111.1,"purchase_count":100,"investor":"Jay"}}],"max_score":1.0,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Sum":{"value":212.2}}}クエリ文に "size":0 を追加すると、aggs の結果のみが返されます。
aggs の集約タイプ
aggs パラメーターでは、メトリック集約、Terms 集約、およびフィルター集約がサポートされています。
カテゴリ | 説明 |
メトリック集約 | 通常、数値型フィールド (integer、double など) に対して数値計算または統計を実行し、ネストされたサブ集約はサポートしません。 次のメトリックがサポートされています。
説明 value_count を除き、他のすべてのメトリックは数値型フィールドのみをサポートします。 出力: 特定のフィールドから計算された DOUBLE 型の値。 |
Terms 集約 | 重複排除された値の数をカウントします。 keyword 型のフィールドのみがサポートされています。 ネストされた集約がサポートされています。 パラメーターの説明:
例: 出力: 集約名をキーとし、Object をタイプとする JSON オブジェクト。 オブジェクトでは、キー集約はバケットを使用して統計を表示します。 各バケットには、キー (集約フィールド) と doc_count (集約フィールドに関連付けられたドキュメントの数) が含まれます。 例: |
フィルター集約 | filter に query 文を入力して、query 結果をさらにフィルターできます。ネストされたサブ集約がサポートされています。 出力: フィルター条件に一致するドキュメント数 (doc_count)。 |
集約の例
インデックスを作成します。
TFT.CREATEINDEX today_shares '{"mappings":{"properties":{"shares_name":{"type":"keyword"},"logictime":{"type":"long"},"purchase_type":{"type":"integer"},"purchase_price":{"type":"double"},"purchase_count":{"type":"long"},"investor":{"type":"keyword"}}}}' # 今日の株式取引高を表すインデックスを作成します。 # shares_name: 各株式の名前。 # logictime: 取引が完了した時間。 # purchase_type: 購入タイプ。 # purchase_price: 購入価格。 # purchase_count: 購入した株式の数。 # investor: 投資家 ID。期待される出力:
OKドキュメントデータを追加します。
次のコマンドを実行します。
TFT.ADDDOC today_shares '{"shares_name":"XAX","logictime":14300210, "purchase_type":1,"purchase_price":101.1, "purchase_count":100,"investor":"Jay"}' TFT.ADDDOC today_shares '{"shares_name":"XAX","logictime":14300310, "purchase_type":1,"purchase_price":111.1, "purchase_count":100,"investor":"Jay"}' TFT.ADDDOC today_shares '{"shares_name":"YBY","logictime":14300410, "purchase_type":1,"purchase_price":11.1, "purchase_count":100,"investor":"Mila"}'期待される出力:
OKクエリを実行します。
クエリの例:
sum
# Jay が株式の購入に費した合計金額をクエリします。 TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Sum":{"sum":{"field":"purchase_price"}}}}' # 期待される出力: {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Sum":{"value":212.2}}}max
# Jay が株式の購入に費した最大金額をクエリします。 TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Max":{"max":{"field":"purchase_price"}}}}' # 期待される出力: {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Max":{"value":111.1}}}avg
# Jay が異なる株式の購入に費した平均金額をクエリします。 TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Avg":{"avg":{"field":"purchase_price"}}}}' # 期待される出力: {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Avg":{"value":106.1}}}std_deviation
# Jay が株式の購入に費した金額の標準偏差をクエリします。 TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Std_Deviation":{"std_deviation":{"field":"purchase_price"}}}}' # 期待される出力: {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Std_Deviation":{"value":5.0}}}extended_stats
# Jay が株式の購入に費した金額の統計をクエリします。 TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Extended_Stats":{"extended_stats":{"field":"purchase_price"}}}}' # 期待される出力: {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Extended_Stats":{"count":2,"sum":212.2,"max":111.1,"min":101.1,"avg":106.1,"sum_of_squares":10221.21,"variance":25.0,"std_deviation":5.0}}}terms
# 少なくとも 2 回の取引を完了した投資家をクエリします。 TFT.SEARCH today_shares '{"size":0,"query":{"term":{"purchase_type":1}},"aggs":{"Per_Investor_Freq":{"terms":{"field":"investor","min_doc_count":2,"order": {"_key":"desc"}}}}}' # 期待される出力: {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":3}},"aggregations":{"Per_Investor_Freq":{"buckets":[{"key":"Jay","doc_count":2}]}}}ネストされた terms 集約
# XAX 株式を除き、各株式の取引数と平均購入価格をクエリします。 TFT.SEARCH today_shares '{"size":0,"query":{"term":{"purchase_type":1}},"aggs":{"Per_Investor_Freq":{"terms":{"field":"shares_name","include":"[A-Z]+","exclude":["XAX"]},"aggs":{"Price_Avg":{"avg":{"field":"purchase_price"}}}}}}' # 期待される出力: {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":3}},"aggregations":{"Per_Investor_Freq":{"buckets":[{"key":"YBY","doc_count":1,"Price_Avg":{"value":11.1}}]}}}ネストされたフィルター集約
# Jay が購入した株式の数と全体的な統計 (メトリック値) をクエリします。 TFT.SEARCH today_shares '{"size":0,"query":{"term":{"purchase_type":1}}, "aggs":{"Jay_BuyIn_Filter": {"filter": {"term":{"investor": "Jay"}},"aggs":{"Jay_BuyIn_Quatation":{"extended_stats":{"field":"purchase_price"}}}}}}' # 期待される出力: {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":3}},"aggregations":{"Jay_BuyIn_Filter":{"doc_count":2,"Jay_BuyIn_Quatation":{"count":2,"sum":212.2,"max":111.1,"min":101.1,"avg":106.1,"sum_of_squares":10221.21,"variance":25.0,"std_deviation":5.0}}}}