TairSearchは、Tairの社内フルテキスト検索データ構造で、Elasticsearchと同様のクエリ構文を使用します。
概要
TairSearchには次の機能があります。
低レイテンシと高性能: Tairの超高計算能力に基づいて、ミリ秒レベルの書き込みおよび全文検索機能を提供します。 詳細については、「TairSearch performance whitepaper」をご参照ください。
増分および部分更新: インデックスの部分更新とドキュメントの増分更新 (フィールドの追加、更新、削除、自動増分など) をサポートします。
柔軟な構文: カスタムソート順序を提供し、bool、match、term、およびpagingクエリを可能にするJSON構文をサポートします。 この構文は、Elasticsearchの構文と似ています。
集計クエリ: 用語、メトリック、およびフィルター集計をサポートします。 詳細については、「集計」をご参照ください。
Auto-complete suggestion: プレフィックスとのファジー一致と検索操作の自動完了をサポートします。
カスタムアナライザー: 英語や中国語などの主要言語用の組み込みアナライザーを提供し、アナライザーの辞書とストップワードのパーソナライズされた要件を満たします。 詳細については、「検索アナライザー」をご参照ください。
Shard index query: TFT.MSEARCHコマンドを使用して複数のシャードインデックスを検索し、集計結果セットを返すことができます。
ドキュメント圧縮: メモリ使用量を減らすために、圧縮ドキュメントの保存をサポートします。 デフォルトでは、この機能は無効化されています。
クエリキャッシュ: 最新のクエリ結果をキャッシュに格納して、ホットデータのクエリ効率を向上させます。
リリースノート
Redis 5.0互換DRAMベースのインスタンス
2022年3月11日、TairSearchはTairV1.7.27でリリースされました。
2022年5月24日、TairSearch集計機能のサポートを追加するためにTairV1.8.5がリリースされました。
2022年9月6日、TFT.MSEARCHコマンドのサポートを追加するためにTair V5.0.15がリリースされました。
2023年1月13日、アナライザーのサポートを追加するためにTairV5.0.25がリリースされました。
2023年3月15日、クエリのキャッシュ、ドキュメントの圧縮、およびTFT.ANALYZERコマンドのサポートを追加するために、Tair V5.0.28がリリースされました。
2023年6月12日、ARRAYデータタイプと類似性ランキングアルゴリズムOkapi BM25のドキュメントのサポートを追加するために、Tair V5.0.35がリリースされました。
Redis 6.0互換DRAMベースのインスタンス
2023年2月7日、TairSearchのサポートを追加するためにTairV6.2.4.1がリリースされました。
Tair V6.2.4.1には、Tair V5.0.25のRedis 5.0互換DRAMベースのインスタンスが提供するすべての機能があります。
2023年3月14日、クエリのキャッシュ、ドキュメントの圧縮、TFT.ANALYZERコマンドのサポートを追加するために、Tair V6.2.5.0がリリースされました。
Tair V6.2.5.0には、Tair V5.0.28のRedis 5.0互換DRAMベースのインスタンスが提供するすべての機能があります。
2023年6月12日、ARRAYデータタイプと類似性ランキングアルゴリズムOkapi BM25のドキュメントのサポートを追加するために、Tair V6.2.7.3がリリースされました。
Tair V6.2.7.3には、Tair V5.0.35のRedis 5.0互換DRAMベースのインスタンスが提供するすべての機能があります。
2023年12月21日、TFT.EXPLAINSCOREコマンドをサポートするTair V23.12.1.2がリリースされました。
ベストプラクティス
前提条件
インスタンスは、次の要件のいずれかを満たすTair DRAMベースのインスタンスです。
Redis 5.0と互換性のあるDRAMベースのインスタンス: マイナーバージョン1.7.27以降を実行します。
Redis 6.0と互換性のあるDRAMベースのインスタンス: マイナーバージョン6.2.4.1以降を実行します。
最新のマイナーバージョンは、より多くの機能とより高い安定性を提供します。 インスタンスを最新のマイナーバージョンに更新することを推奨します。 詳細については、「インスタンスのマイナーバージョンの更新」をご参照ください。 お使いのインスタンスがクラスターインスタンスまたは読み書き分離インスタンスの場合、すべてのコマンドを期待どおりに実行できるように、インスタンスのプロキシノードを最新のマイナーバージョンに更新することを推奨します。
注意事項
管理するTairSearchデータは、Tairインスタンスに保存されます。
メモリ使用量を減らすには、次の操作を実行することを推奨します。
インデックスを作成するときは、ドキュメントフィールドのインデックスをtrueに設定して、これらのフィールドをインデックスフィールドとして指定します。 他のドキュメントフィールドでは、インデックスをfalseに設定します。
_sourceパラメーターでincludesおよびexcludesパターンの配列を含むオブジェクトを指定して、不要なドキュメントフィールドを除外し、必要なフィールドを保存します。
ドキュメントをトークンに分割する場合は、適切なアナライザーを選択して、不要な分割やメモリ使用量の増加を防ぎます。
ドキュメントが大きすぎる場合は、ドキュメント圧縮機能を使用して、ドキュメントを自動的に圧縮および解凍します。
1つのインデックスに多数のドキュメントを追加しないでください。 ドキュメントを複数のインデックスに追加します。 クラスターインスタンスでのデータスキューを防ぎ、読み取りと書き込みのリクエストのバランスを取り、大きなキーとホットキーの数を減らすために、インデックスあたりのドキュメント数を500万以内に抑えることをお勧めします。
サポートされるコマンド
表 1 全文検索コマンド
コマンド | 構文 | 説明 |
| インデックスとインデックスのマッピングを作成します。 マッピングの作成に使用される構文は、Elasticsearchで明示的なマッピングを作成するのに使用される構文と似ています。 詳細については、「明示的マッピング」をご参照ください。 インデックスにドキュメントを追加する前に、インデックスを作成する必要があります。 | |
| propertiesフィールドを指定したインデックスに追加するか、インデックスの設定を変更します。 | |
| インデックスのマッピングコンテンツを取得します。 | |
| インデックスにドキュメントを追加します。 WITH_ID doc_IDを使用して、インデックス内のドキュメントの一意のidを指定できます。 ドキュメントIDが既に存在する場合、既存のIDは上書きされます。 WITH_ID doc_idを指定しない場合、ドキュメントIDが自動的に生成されます。 デフォルトでは、WITH_ID doc_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で指定されたドキュメントをインデックスから削除します。 | |
| インデックスからすべてのドキュメントを削除しますが、インデックスは保持します。 | |
| 指定されたアナライザーのトークン化効果を照会します。 | |
| インデックス内のドキュメントを照会します。 クエリ構文は、Elasticsearchで使用されるquery Domain Specific Language (DSL) 構文に似ています。 詳細については、「クエリDSL」をご参照ください。 | |
| クエリ句を使用して、マッピングと設定が同じ値に設定されている複数のインデックスのドキュメントをクエリし、これらのインデックスから結果を収集します。 次に、結果が評価され、ソートされ、集計され、返されます。 | |
| クエリ文の実行期間を照会します。 出力には、クエリに含まれるドキュメントの数と、クエリの各操作で消費される時間が含まれます。 | |
| クエリステートメントの実行結果のドキュメントの詳細なスコア情報を照会します。 このコマンドを使用すると、ドキュメントスコアの計算方法についての洞察を得ることができます。 次に、検索クエリを最適化して、ドキュメント検索の有効性を高めることができます。 | |
| 1つ以上のTairSearchキーを削除します。 |
表 2. 自動完了コマンド
コマンド | 構文 | 説明 |
| 1つ以上のオートコンプリートテキストエントリとその重みを指定されたインデックスに追加します。 | |
| 指定したインデックスから1つ以上のオートコンプリートテキストエントリを削除します。 | |
| 指定されたインデックス内のオートコンプリートテキストエントリの数を取得します。 | |
| 指定されたプレフィックスに基づいて一致する自動補完テキストエントリを取得します。 テキストエントリは、重みの降順で返されます。 | |
| 指定したインデックス内のすべてのオートコンプリートテキストエントリを取得します。 |
このトピックで使用されるコマンド構文の規則を次に示します。
Uppercase keyword
: commandキーワードを示します。イタリックテキスト
: 変数を示します。[options]
: 囲まれたパラメータがオプションであることを示します。 括弧で囲まれていないパラメータを指定する必要があります。A | B
: 縦棒 (|) で区切られたパラメータが相互に排他的であることを示します。 指定できるパラメーターは1つだけです。...
: このシンボルの前にあるパラメーターを繰り返し指定できることを示します。
TFT.CREATEINDEX
項目 | 説明 |
構文 |
|
コマンド説明 | インデックスとインデックスのマッピングを作成します。 マッピングの作成に使用される構文は、Elasticsearchで明示的なマッピングを作成するのに使用される構文と似ています。 詳細については、「明示的マッピング」をご参照ください。 インデックスにドキュメントを追加する前に、インデックスを作成する必要があります。 説明 大きなキーが生成されないようにするには、大きなインデックスを小さなインデックスに分割し、負荷分散ルールを考案してデータを異なるインデックスに書き込むことができます。 インデックスを作成するときは、これらのインデックスのマッピングおよび設定パラメーターが同じ値に設定されていることを確認してください。 これらのインデックスが作成されたら、TFT.MSEARCHを使用してクエリできます。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド: サンプル出力:
|
TFT.UPDATEINDEX
項目 | 説明 |
構文 |
|
コマンド説明 | propertiesフィールドを指定したインデックスに追加するか、インデックスの設定を変更します。 |
パラメーター |
説明 マッピングおよび設定パラメーターの詳細については、「TFT.CREATEINDEX」をご参照ください。 |
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TFT.GETINDEX
項目 | 説明 |
構文 |
|
コマンド説明 | インデックスのマッピングコンテンツを取得します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TFT.ADDDOC
項目 | 説明 |
構文 |
|
コマンド説明 | インデックスにドキュメントを追加します。 WITH_ID doc_IDを使用して、インデックス内のドキュメントの一意のidを指定できます。 ドキュメントIDが既に存在する場合、既存のIDは上書きされます。 WITH_ID doc_idを指定しない場合、ドキュメントIDが自動的に生成されます。 デフォルトでは、WITH_ID doc_idは指定されていません。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
追加するサンプル配列:
|
TFT.MADDDOC
項目 | 説明 |
構文 |
|
コマンド説明 | インデックスに複数のドキュメントを追加します。 各ドキュメントには、doc_idで指定されたドキュメントIDが必要です。 フォーマットが無効なためにドキュメントの追加に失敗した場合、コマンドに含まれるすべてのドキュメントはインデックスに追加されません。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TFT. UPDATEDOCHIELD
項目 | 説明 |
構文 |
|
コマンド説明 | インデックス内のdoc_idで指定されたドキュメントを更新します。 更新するドキュメントフィールドが、ドキュメントマッピングによって決定される方法でインデックス付けされている場合、フィールドデータ型は、マッピングで指定されたものと同じである必要があります。 更新するフィールドがインデックス付きフィールドでない場合は、任意のデータ型を使用できます。 説明 フィールドが既に存在する場合、ドキュメントは更新されます。 フィールドが存在しない場合は、フィールドが追加されます。 ドキュメントが存在しない場合、ドキュメントは自動的に作成されます。 この場合、コマンドはTFT.ADDDOCに相当します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TFT. DELDOCHIELD
項目 | 説明 |
構文 |
|
コマンド説明 | インデックスのdoc_idで指定されたドキュメントから指定されたフィールドを削除します。 フィールドがインデックス付きフィールドである場合、フィールドの情報もインデックスから削除される。 説明 フィールドが存在しない場合、操作は実行できません。 たとえば、フィールドは _sourceを使用して除外されるため、存在しない場合があります。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TFT. INCRLONGDOCHIELD
項目 | 説明 |
構文 |
|
コマンド説明 | インデックスのdoc_idで指定されたドキュメントの指定されたフィールドに増分を追加します。 増分は、正または負の整数とすることができる。 フィールドのデータ型はLONGまたはINTEGERのみです。 説明 ドキュメントが存在しない場合、ドキュメントは自動的に作成されます。 この場合、フィールドの既存の値は0であり、更新されたフィールド値は、既存のフィールド値に増分値を加算することによって得られる。 フィールドが存在しない場合、操作は実行できません。 たとえば、_sourceを使用して除外されるため、フィールドが存在しない場合があります。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TFT. INCRFLOATDOCHIELD
項目 | 説明 |
構文 |
|
コマンド説明 | インデックスのdoc_idで指定されたドキュメントの指定されたフィールドに増分を追加します。 増分は、正または負の浮動小数点数とすることができる。 フィールドのデータ型はDOUBLEのみです。 説明 ドキュメントが存在しない場合、ドキュメントは自動的に作成されます。 この場合、フィールドの既存の値は0であり、更新されたフィールド値は、既存のフィールド値に増分値を加算することによって得られる。 フィールドが存在しない場合、操作は実行できません。 たとえば、_sourceを使用して除外されるため、フィールドが存在しない場合があります。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TFT.GETDOC
項目 | 説明 |
構文 |
|
コマンド説明 | インデックスのdoc_idで指定されたドキュメントのコンテンツを取得します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TFT.EXISTS
項目 | 説明 |
構文 |
|
コマンド説明 | doc_idで指定したドキュメントがインデックスに存在するかどうかを確認します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TFT.DOCNUM
項目 | 説明 |
構文 |
|
コマンド説明 | インデックス内のドキュメントの数を取得します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TFT.SCANDOCID
項目 | 説明 |
構文 |
|
コマンド説明 | インデックス内のすべてのドキュメントのIDを取得します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TFT.DELDOC
項目 | 説明 |
構文 |
|
コマンド説明 | doc_idで指定されたドキュメントをインデックスから削除します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力: |
TFT. デルタ
項目 | 説明 |
構文 |
|
コマンド説明 | インデックスからすべてのドキュメントを削除しますが、インデックスは保持します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TFT. アナリスト
項目 | 説明 |
構文 |
|
コマンド説明 | 指定されたアナライザーのトークン化効果を照会します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TFT. 検索
項目 | 説明 |
構文 |
|
コマンド説明 | インデックス内のドキュメントを照会します。 クエリ構文は、Elasticsearchで使用されるquery Domain Specific Language (DSL) 構文に似ています。 詳細については、「クエリDSL」をご参照ください。 |
パラメーター | index: このコマンドを実行して管理するインデックスの名前。 query: Elasticsearchで使用される構文に似たQuery DSLステートメント。 次のフィールドがサポートされています。
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TFT.MSEARCH
項目 | 説明 |
構文 |
|
コマンド説明 | クエリ句を使用して、マッピングと設定が同じ値に設定されている複数のインデックスのドキュメントをクエリし、これらのインデックスから結果を収集します。 次に、結果が評価され、ソートされ、集計され、返されます。 説明 TFT.MSEARCHコマンドの出力は、これらのインデックスからのクエリ結果のレーティング、ソート、および集約の結果です。 出力は、データセットを複数のインデックスで直接評価、並べ替え、集計して生成された結果とは異なります。 TFT.MSEARCHポリシー:
|
パラメーター |
説明 TFT.SEARCHコマンドのqueryステートメントとは異なり、TFT.MSEARCHコマンドのqueryステートメントはfromパラメーターをサポートしませんが、size、reply_with_keys_cursor、およびkeys_cursorパラメーターを使用してページングされたクエリをサポートします。 他のパラメーターの構文の詳細については、「TFT.SEARCH」をご参照ください。 |
Output |
|
例: | 事前に次のコマンドを実行します。
サンプルコマンド:
サンプル出力:
2ページ目を照会するためのサンプルコマンド: サンプル出力:
|
TFT.EXPLAINCOST
項目 | 説明 |
構文 |
|
コマンド説明 | クエリ文の実行期間を照会します。 出力には、クエリに含まれるドキュメントの数と、クエリの各操作で消費される時間が含まれます。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TFT.EXPLAINSCORE
項目 | 説明 |
構文 |
|
コマンド説明 | クエリステートメントの実行結果のドキュメントの詳細なスコア情報を照会します。 このコマンドを使用すると、ドキュメントスコアの計算方法についての洞察を得ることができます。 次に、検索クエリを最適化して、ドキュメント検索の有効性を高めることができます。 このコマンドは、Redis 6.0と互換性のあるDRAMベースのインスタンスでのみ使用できます。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TFT.ADDSUG
項目 | 説明 |
構文 |
|
コマンド説明 | 1つ以上のオートコンプリートテキストエントリとその重みを指定されたインデックスに追加します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TFT.DELSUG
項目 | 説明 |
構文 |
|
コマンド説明 | 指定したインデックスから1つ以上のオートコンプリートテキストエントリを削除します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TFT.SUGNUM
項目 | 説明 |
構文 |
|
コマンド説明 | 指定されたインデックス内のオートコンプリートテキストエントリの数を取得します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TFT.GETSUG
項目 | 説明 |
構文 |
|
コマンド説明 | 指定されたプレフィックスに基づいて一致する自動補完テキストエントリを取得します。 テキストエントリは、重みの降順で返されます。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TFT.GETALLSUGS
項目 | 説明 |
構文 |
|
コマンド説明 | 指定したインデックス内のすべてのオートコンプリートテキストエントリを取得します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
集約
aggs (aggregations) パラメーターをTFT.SEARCHコマンドに追加して、query句を使用して取得した結果を集計できます。
使用状況
ほとんどの場合、aggsパラメーターの集計名、型、およびフィールドを指定する必要があります。 数値およびキーワードタイプのフィールドのみがサポートされています。 サンプルコマンド:
TFT.SEARCH shares '{"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Sum":{"sum":{"field":"purchase_price"}}}}'
# Specify Jay_Sum as the aggregation name, sum as the aggregation type, and purchase_price as the aggregation field.
クエリと集計結果が返されます。 例:
{"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パラメーターでサポートされています。
項目 | 説明 |
メトリック集約Metrics aggregation | 集計されているドキュメントのフィールドから抽出された値に基づいてメトリックを計算します。 これらのフィールドは通常、INTEGERまたはDOUBLEなどの数値型です。 ネストされた集計はサポートされません。 有効な値:
説明 value_countを除くすべてのパラメーターは、数値フィールドのみをサポートします。 出力: 特定のフィールドから計算されたダブルタイプの値。 |
用語の集約 | 値の重複排除数を計算します。 keywordタイプのフィールドのみがサポートされています。 ネストされた集計がサポートされます。 有効な値:
例:
出力: キー集約を使用して取得されたJSONオブジェクト。 オブジェクトでは、キー集計はバケットを使用して統計を表示します。 各バケットは、キー (集約フィールド) およびdoc_count値 (集約フィールドに関連付けられたドキュメントの数) を含む。 例:
|
フィルター集約 | 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"}}}}' # Create an index that represents the stock trading volume of today. # shares_name: the name of each stock. # logictime: the time when the deal is complete. # purchase_type: the purchase type. # purchase_price: the purchase price. # purchase_count: the number of purchased stock shares. # investor: the ID of the buyer.
期待される出力:
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
# Query the total amount that Jay spent to purchase the stocks. TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Sum":{"sum":{"field":"purchase_price"}}}}' # Expected output: {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Sum":{"value":212.2}}}
max
# Query the largest amount that Jay spent to purchase a stock. TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Max":{"max":{"field":"purchase_price"}}}}' # Expected output: {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Max":{"value":111.1}}}
avg
# Query the average amount that Jay spent to purchase different stocks. TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Avg":{"avg":{"field":"purchase_price"}}}}' # Expected output: {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Avg":{"value":106.1}}}
std_deviation
# Query the standard deviation of the amount that Jay spent to purchase stocks. TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Std_Deviation":{"std_deviation":{"field":"purchase_price"}}}}' # Expected output: {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Std_Deviation":{"value":5.0}}}
extended_stats
# Query the statistics of the amount that Jay spent to purchase stocks. TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Extended_Stats":{"extended_stats":{"field":"purchase_price"}}}}' # Expected output: {"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}}}
用語
# Query the buyers that have completed at least two transactions. 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"}}}}}' # Expected output: {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":3}},"aggregations":{"Per_Investor_Freq":{"buckets":[{"key":"Jay","doc_count":2}]}}}
ネストされた用語の集約
# Query the number of transactions conducted for each stock and the average amount spent to purchase each stock. The XAX stock is excluded. 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"}}}}}}' # Expected output: {"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}}]}}}
ネストされたフィルター集約
# Query the total number of stocks purchased by Jay and the statistics of the amount that Jay spent to purchase stocks. 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"}}}}}}' # Expected output: {"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}}}}