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

Tair (Redis® OSS-Compatible):検索

最終更新日:Nov 15, 2024

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ベースのインスタンス

  1. 2022年3月11日、TairSearchはTairV1.7.27でリリースされました。

  2. 2022年5月24日、TairSearch集計機能のサポートを追加するためにTairV1.8.5がリリースされました。

  3. 2022年9月6日、TFT.MSEARCHコマンドのサポートを追加するためにTair V5.0.15がリリースされました。

  4. 2023年1月13日、アナライザーのサポートを追加するためにTairV5.0.25がリリースされました。

  5. 2023年3月15日、クエリのキャッシュ、ドキュメントの圧縮、およびTFT.ANALYZERコマンドのサポートを追加するために、Tair V5.0.28がリリースされました。

  6. 2023年6月12日、ARRAYデータタイプと類似性ランキングアルゴリズムOkapi BM25のドキュメントのサポートを追加するために、Tair V5.0.35がリリースされました。

Redis 6.0互換DRAMベースのインスタンス

  1. 2023年2月7日、TairSearchのサポートを追加するためにTairV6.2.4.1がリリースされました。

    Tair V6.2.4.1には、Tair V5.0.25のRedis 5.0互換DRAMベースのインスタンスが提供するすべての機能があります。

  2. 2023年3月14日、クエリのキャッシュ、ドキュメントの圧縮、TFT.ANALYZERコマンドのサポートを追加するために、Tair V6.2.5.0がリリースされました。

    Tair V6.2.5.0には、Tair V5.0.28のRedis 5.0互換DRAMベースのインスタンスが提供するすべての機能があります。

  3. 2023年6月12日、ARRAYデータタイプと類似性ランキングアルゴリズムOkapi BM25のドキュメントのサポートを追加するために、Tair V6.2.7.3がリリースされました。

    Tair V6.2.7.3には、Tair V5.0.35のRedis 5.0互換DRAMベースのインスタンスが提供するすべての機能があります。

  4. 2023年12月21日、TFT.EXPLAINSCOREコマンドをサポートするTair V23.12.1.2がリリースされました。

ベストプラクティス

前提条件

インスタンスは、次の要件のいずれかを満たすTair DRAMベースのインスタンスです。

説明

最新のマイナーバージョンは、より多くの機能とより高い安定性を提供します。 インスタンスを最新のマイナーバージョンに更新することを推奨します。 詳細については、「インスタンスのマイナーバージョンの更新」をご参照ください。 お使いのインスタンスがクラスターインスタンスまたは読み書き分離インスタンスの場合、すべてのコマンドを期待どおりに実行できるように、インスタンスのプロキシノードを最新のマイナーバージョンに更新することを推奨します。

注意事項

  • 管理するTairSearchデータは、Tairインスタンスに保存されます。

  • メモリ使用量を減らすには、次の操作を実行することを推奨します。

    • インデックスを作成するときは、ドキュメントフィールドのインデックスをtrueに設定して、これらのフィールドをインデックスフィールドとして指定します。 他のドキュメントフィールドでは、インデックスをfalseに設定します。

    • _sourceパラメーターでincludesおよびexcludesパターンの配列を含むオブジェクトを指定して、不要なドキュメントフィールドを除外し、必要なフィールドを保存します。

    • ドキュメントをトークンに分割する場合は、適切なアナライザーを選択して、不要な分割やメモリ使用量の増加を防ぎます。

    • ドキュメントが大きすぎる場合は、ドキュメント圧縮機能を使用して、ドキュメントを自動的に圧縮および解凍します。

  • 1つのインデックスに多数のドキュメントを追加しないでください。 ドキュメントを複数のインデックスに追加します。 クラスターインスタンスでのデータスキューを防ぎ、読み取りと書き込みのリクエストのバランスを取り、大きなキーとホットキーの数を減らすために、インデックスあたりのドキュメント数を500万以内に抑えることをお勧めします。

サポートされるコマンド

表 1 全文検索コマンド

コマンド

構文

説明

TFT.CREATEINDEX

TFT.CREATEINDEXインデックスマッピング設定

インデックスとインデックスのマッピングを作成します。 マッピングの作成に使用される構文は、Elasticsearchで明示的なマッピングを作成するのに使用される構文と似ています。 詳細については、「明示的マッピング」をご参照ください。 インデックスにドキュメントを追加する前に、インデックスを作成する必要があります。

TFT.UPDATEINDEX

TFT.UPDATEINDEXインデックスマッピング設定

propertiesフィールドを指定したインデックスに追加するか、インデックスの設定を変更します。

TFT.GETINDEX

TFT.GETINDEXインデックス

インデックスのマッピングコンテンツを取得します。

TFT.ADDDOC

TFT.ADDDOCインデックスドキュメント [WITH_ID doc_id]

インデックスにドキュメントを追加します。 WITH_ID doc_IDを使用して、インデックス内のドキュメントの一意のidを指定できます。 ドキュメントIDが既に存在する場合、既存のIDは上書きされます。 WITH_ID doc_idを指定しない場合、ドキュメントIDが自動的に生成されます。 デフォルトでは、WITH_ID doc_idは指定されていません。

TFT.MADDDOC

TFT.MADDDOCインデックスドキュメントdoc_id [document1 doc_id1] ...

インデックスに複数のドキュメントを追加します。 各ドキュメントには、doc_idで指定されたドキュメントIDが必要です。 フォーマットが無効なためにドキュメントの追加に失敗した場合、コマンドに含まれるすべてのドキュメントはインデックスに追加されません。

TFT. UPDATEDOCHIELD

TFT.UPDATEDOCFIELDインデックスdoc_idドキュメント

インデックス内のdoc_idで指定されたドキュメントを更新します。 更新するドキュメントフィールドが、ドキュメントマッピングによって決定される方法でインデックス付けされている場合、フィールドデータ型は、マッピングで指定されたものと同じである必要があります。 更新するフィールドがインデックス付きフィールドでない場合は、任意のデータ型を使用できます。

説明

フィールドが既に存在する場合、ドキュメントは更新されます。 フィールドが存在しない場合は、フィールドが追加されます。 ドキュメントが存在しない場合、ドキュメントは自動的に作成されます。 この場合、コマンドはTFT.ADDDOCに相当します。

TFT. DELDOCHIELD

TFT.DELDOCFIELDインデックスdoc_idフィールド [field1 field2 ...]

インデックスのdoc_idで指定されたドキュメントから指定されたフィールドを削除します。 フィールドがインデックス付きフィールドである場合、フィールドの情報もインデックスから削除される。

説明

フィールドが存在しない場合、操作は実行できません。 たとえば、フィールドは _sourceを使用して除外されるため、存在しない場合があります。

TFT. INCRLONGDOCHIELD

TFT.INCRLONGDOCFIELDインデックスdoc_idフィールドの増分

インデックスのdoc_idで指定されたドキュメントの指定されたフィールドに増分を追加します。 増分は、正または負の整数とすることができる。 フィールドのデータ型はLONGまたはINTEGERのみです。

説明

ドキュメントが存在しない場合、ドキュメントは自動的に作成されます。 この場合、フィールドの既存の値は0であり、更新されたフィールド値は、既存のフィールド値に増分値を加算することによって得られる。 フィールドが存在しない場合、操作は実行できません。 たとえば、_sourceを使用して除外されるため、フィールドが存在しない場合があります。

TFT. INCRFLOATDOCHIELD

TFT.INCRFLOATDOCFIELDインデックスdoc_idフィールドの増分

インデックスのdoc_idで指定されたドキュメントの指定されたフィールドに増分を追加します。 増分は、正または負の浮動小数点数とすることができる。 フィールドのデータ型はDOUBLEのみです。

説明

ドキュメントが存在しない場合、ドキュメントは自動的に作成されます。 この場合、フィールドの既存の値は0であり、更新されたフィールド値は、既存のフィールド値に増分値を加算することによって得られる。 フィールドが存在しない場合、操作は実行できません。 たとえば、_sourceを使用して除外されるため、フィールドが存在しない場合があります。

TFT.GETDOC

TFT.GETDOCインデックスdoc_id

インデックスのdoc_idで指定されたドキュメントのコンテンツを取得します。

TFT.EXISTS

TFT.EXISTSインデックスdoc_id

doc_idで指定したドキュメントがインデックスに存在するかどうかを確認します。

TFT.DOCNUM

TFT.DOCNUMインデックス

インデックス内のドキュメントの数を取得します。

TFT.SCANDOCID

TFT.SCANDOCIDインデックスカーソル [MATCH * value *] [COUNT count]

インデックス内のすべてのドキュメントのIDを取得します。

TFT.DELDOC

TFT.DELDOCインデックスdoc_id [doc_id] ...

doc_idで指定されたドキュメントをインデックスから削除します。

TFT. デルタ

TFT. DELLLインデックス

インデックスからすべてのドキュメントを削除しますが、インデックスは保持します。

TFT. アナリスト

TFT.ANALYZER analyzer_nameテキスト [INDEX index_name] [SHOW_TIME]

指定されたアナライザーのトークン化効果を照会します。

TFT. 検索

TFT.SEARCHインデックスクエリ

インデックス内のドキュメントを照会します。 クエリ構文は、Elasticsearchで使用されるquery Domain Specific Language (DSL) 構文に似ています。 詳細については、「クエリDSL」をご参照ください。

TFT.MSEARCH

TFT.MSEARCH index_count index [index1] ... クエリ

クエリ句を使用して、マッピング設定が同じ値に設定されている複数のインデックスのドキュメントをクエリし、これらのインデックスから結果を収集します。 次に、結果が評価され、ソートされ、集計され、返されます。

TFT.EXPLAINCOST

TFT.EXPLAINCOSTインデックスクエリ

クエリ文の実行期間を照会します。 出力には、クエリに含まれるドキュメントの数と、クエリの各操作で消費される時間が含まれます。

TFT.EXPLAINSCORE

TFT.EXPLAINSCOREインデックスクエリ [doc_id] ...

クエリステートメントの実行結果のドキュメントの詳細なスコア情報を照会します。 このコマンドを使用すると、ドキュメントスコアの計算方法についての洞察を得ることができます。 次に、検索クエリを最適化して、ドキュメント検索の有効性を高めることができます。

DEL

DELキー [キー...]

1つ以上のTairSearchキーを削除します。

表 2. 自動完了コマンド

コマンド

構文

説明

TFT.ADDSUG

TFT.ADDSUGインデックステキストの重み [テキストの重み] ...

1つ以上のオートコンプリートテキストエントリとその重みを指定されたインデックスに追加します。

TFT.DELSUG

TFT.DELSUGインデックステキスト [text] ...

指定したインデックスから1つ以上のオートコンプリートテキストエントリを削除します。

TFT.SUGNUM

TFT.SUGNUMインデックス

指定されたインデックス内のオートコンプリートテキストエントリの数を取得します。

TFT.GETSUG

TFT.GETSUGインデックスプレフィックス [MAX_COUNT count] [FUZZY]

指定されたプレフィックスに基づいて一致する自動補完テキストエントリを取得します。 テキストエントリは、重みの降順で返されます。

TFT.GETALLSUGS

TFT.GETALLSUGSインデックス

指定したインデックス内のすべてのオートコンプリートテキストエントリを取得します。

説明

このトピックで使用されるコマンド構文の規則を次に示します。

  • Uppercase keyword: commandキーワードを示します。

  • イタリックテキスト: 変数を示します。

  • [options]: 囲まれたパラメータがオプションであることを示します。 括弧で囲まれていないパラメータを指定する必要があります。

  • A | B: 縦棒 (|) で区切られたパラメータが相互に排他的であることを示します。 指定できるパラメーターは1つだけです。

  • ...: このシンボルの前にあるパラメーターを繰り返し指定できることを示します。

TFT.CREATEINDEX

項目

説明

構文

TFT.CREATEINDEXインデックスマッピング設定

コマンド説明

インデックスとインデックスのマッピングを作成します。 マッピングの作成に使用される構文は、Elasticsearchで明示的なマッピングを作成するのに使用される構文と似ています。 詳細については、「明示的マッピング」をご参照ください。 インデックスにドキュメントを追加する前に、インデックスを作成する必要があります。

説明

大きなキーが生成されないようにするには、大きなインデックスを小さなインデックスに分割し、負荷分散ルールを考案してデータを異なるインデックスに書き込むことができます。 インデックスを作成するときは、これらのインデックスのマッピングおよび設定パラメーターが同じ値に設定されていることを確認してください。 これらのインデックスが作成されたら、TFT.MSEARCHを使用してクエリできます。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

  • mappings: マッピングコンテンツ。 次の構文がサポートされています。

    • dynamic: マッピングモード。 strictマッピングモードがサポートされています。 propertiesで指定されたフィールドのみを書き込むことができます。 マッピングモードを指定しない場合、非厳密マッピングが使用されます。 非strictモードでは、書き込まれるフィールドがプロパティで指定されているかどうかはチェックされません。

    • enabled: 書き込まれるドキュメントのフィールドタイプがプロパティで指定されたものと同じかどうかを強制的にチェックします。 それらが同じでない場合、文書を書くことはできません。 有効な値は、true および false です。 デフォルト値はtrueで、強制チェックが実行されていることを示します。 このパラメーターは、インデックスなしのフィールドに対してのみ有効です (indexをfalseに設定) 。 インデックス付きフィールドの場合、強制チェックが実行されます。

    • _source: 元のドキュメントのソース。 このパラメーターは、フィールドインデックスの作成には影響しません。 有効な値:

      enabled: 元のドキュメントを保存するかどうかを指定します。 有効な値:

      • true: 元のドキュメントを格納します。 デフォルトでは、enabledはtrueに設定され、ドキュメント内のすべてのフィールドが保存されます。

        excludesを設定して、元のドキュメントに保存しないフィールドを指定し、includesを設定して保存するフィールドを指定できます。 ワイルドカードは受け入れられます。 フィールドがexcludesincludesの両方で指定されている場合、excludesincludesよりも優先され、フィールドは元のドキュメントに格納されません。

        例1: "_source":{"enabled":true} (デフォルト) すべてのフィールドを格納するように指定し、"_source":{"enabled":true,"excludes":[],"includes":[]} のように動作します。

        例2: "_source":{"enabled":true、"excludes":[] 、"includes":["id","name"]} は、idフィールドとnameフィールドのみを格納することを指定します。

      • false: 元のドキュメントは保存されません。

    • properties: マップされたフィールドのコレクション。 各フィールドに次の属性を設定できます。

      • index: フィールドをインデックスフィールドに設定するかどうかを指定します。 デフォルト値:true 有効な値:

        • true: フィールドをインデックスフィールドに設定します。 この場合、インデックスフィールドを使用してのみドキュメントをクエリできます。

          Tairは、すべてのインデックスフィールドの元のドキュメントをメモリに保存します。 このフィールドに対して _sourceが "enabled":falseに設定されている場合、クエリの返される元のドキュメントにはこのフィールドは含まれません。

        • false: フィールドをインデックスフィールドに設定しません。

      • ブースト: フィールドの重み。 デフォルト値は 1 です。 パラメータ値は正の浮動小数点数でなければなりません。 Tairは、各フィールドの推定相対スコアを自動的に計算します。

      • type: フィールドのデータ型。 ARRAYデータ型がサポートされています。 このプロパティの有効な値は次のとおりです。

        説明

        たとえば、keyword配列を使用するには、型パラメーターとしてkeyword[] を指定する必要があります。 例: TFT.CREATEINDEX idx:pro '{"mapping":{"properties":{"f0":{"type":"keyword[]" }}}}'

        • keyword: 分割できない文字列。 有効な値:

          • ignore_above: キーワード文字列に含めることができる最大文字数。 デフォルト値: 128 例: "ignore_above":128

          • similarity: 類似性アルゴリズム。 有効な値: classicBM25。 デフォルト値 : classic。 classicは、Term Frequency - Inverse Document Frequency (TF-IDF) アルゴリズムを示します。 BM25はOkapi BM25アルゴリズムを示す。 例: TFT.CREATEINDEX idx:pro '{"mapping":{"properties":{"fs0":{"type":"keyword","similarity":"BM25" }}}}' settingsパラメーターを使用して、Okapi BM25アルゴリズムのカスタムパラメーターを指定することもできます。

        • text: アナライザーで解析してインデックスに格納できる文字列。 有効な値:

          • analyzer: textの文字列を解析して、結果をインデックスに格納します。 デフォルト値: standard。

            • 標準jieba (中国語よりも優れた機能を発揮する中国語の推奨アナライザー) 、stopIKパターン空白simpleキーワード中国語フランス語オランダ語ロシア語などのアナライザーをTairSearch組み込みアナライザーから選択できます。 たとえば、"analyzer":"jieba" は、中国語のjiebaアナライザーが使用されていることを示します。 詳細については、「アナライザーの検索」トピックの「組み込みアナライザー」セクションを参照してください。

            • "analyzer":"my_custom_analyzer" などの構文を使用してカスタムアナライザーを定義し、settingsanalysisパラメーターを設定してアナライザーを構成することもできます。

          • search_analyzer: 検索で使用されるトークナイザー。 サポートされているトークナイザーの種類は、analyzerパラメーターでサポートされているものと同じです。 このパラメーターのデフォルト値は、analyzerパラメーターのデフォルト値と同じです。

          • similarity: 類似性アルゴリズム。 有効な値: classicBM25。 デフォルト値 : classic。 classicはTF-IDFアルゴリズムを示します。 BM25はOkapi BM25アルゴリズムを示す。 settingsパラメーターを使用して、Okapi BM25アルゴリズムのカスタムパラメーターを指定することもできます。

        • long: LONGデータ型。 時点をUNIXタイムスタンプに変換し、そのタイムスタンプをLONG型のデータとして保存できます。

        • integer: INTEGERデータ型。

        • double: DOUBLEデータ型。 NAN、INF、-INFなどの特殊なデータ型はサポートされていません。

  • settings: インデックス設定。 このパラメーターはオプションです。 パラメータのフィールド:

    • analysis: カスタムアナライザー。 詳細については、「アナライザーの検索」トピックの「カスタムアナライザー」セクションを参照してください。

    • index: カスタム類似性アルゴリズム。 Okapi BM25アルゴリズムのパラメータを変更できます。 例:TFT.CREATEINDEX idx:pro15 '{"mapping":{"properties":{"fs0":"keyword","similarity":"my_similarity" }}}}, "settings":{"my_similarity":{"type":"BM25","k1": 1.0 "," b "' }}}}. フィールド:

      • k1: ドキュメント内の特定の用語の頻度とその用語の重み付けとの関連性。 値が大きいほど、周波数は重み付けにより関連する。 デフォルト値: 1.2 0より大きい値を指定する必要があります。

      • b: 指定された用語の重み付けに対するドキュメントサイズの関連性。 値が大きいほど、文書サイズは重み付けに関連する。 デフォルト値: 0.75 有効な値は 0~1 です。

    • queries_cache: クエリ結果を格納するキャッシュ。 デフォルトでは、メモリ使用量に制限がなく、最大10,000のクエリ結果をキャッシュできます。 キャッシュされたクエリ結果の数が10,000に達した後、LRUアルゴリズムを使用して、最も最近使用されたクエリ結果をキャッシュから追い出す。 queries_cacheパラメーターには、sizeフィールドとttlフィールドがあります。 有効な値:

      • size: クエリのキャッシュに使用できるメモリの最大量。 データ型: STRING。 この値を超えると、LRUアルゴリズムを使用して、最も最近使用されていないクエリ結果をキャッシュから削除します。

        このフィールドのデフォルトの単位はバイトです。 たとえば、"size":"1000" は、クエリキャッシュで最大1,000バイト分のメモリを消費できることを指定します。 このフィールドの単位としてKBまたはMBを使用することもできます。 例: "size":"10kb" および "size":"1mb"

      • ttl: キャッシュされたクエリ結果の有効期間。 データ型: INTEGER。 デフォルト値は 10 です。 単位は秒です。

      例: "settings":{"queries_cache":{"size":"100mb","ttl":3}}

      queries_cacheはノードレベルのパラメーターです。 インデックスでこのパラメーターを設定すると、同じプロセス内の他のインデックスが影響を受けます。 そのため、プロセス内のすべてのインデックスに対してqueries_cacheを同じ値に設定することを推奨します。

    • compress_doc: ドキュメントの圧縮を有効にするかどうかを指定します。 この機能を有効にすると、CPUリソース消費量と読み取り /書き込みレイテンシが増加する可能性があります。 したがって、インデックスが大きく (キロバイト単位など) 、ストレージコストが最大の懸念事項である場合にのみ、ドキュメントの圧縮を有効にすることをお勧めします。 有効な値:

      • size: 最初に圧縮の対象となるドキュメントの最小サイズ。 データ型: STRING。 デフォルト値は 10 です。 (単位:KB)

        このフィールドのデフォルトの単位はバイトです。 このフィールドの単位としてKBまたはMBを使用することもできます。 例: "size":"1000""size":"10kb""size":"1mb"

      • enable: ドキュメント圧縮を有効にするかどうかを指定します。 データ型: BOOLEAN。 有効な値は、true および false です。 デフォルト値:false

      例: "settings":{"compress_doc":{"size":"1kb","enable":true}}

      ドキュメントの圧縮設定は、TFT.UPDATEINDEXコマンドを使用してドキュメントの圧縮を有効または無効にした後に、書き込まれた、または更新されたドキュメントに対してのみ有効になります。 たとえば、TFT.UPDATEINDEXコマンドを実行してドキュメントの圧縮を有効にすると、Tairは、ドキュメントの圧縮が有効になった後に書き込まれた、または更新されたドキュメントのみを圧縮します。 ドキュメント圧縮が有効になる前に書き込まれたドキュメントは圧縮されません。

Output

  • 操作が成功した場合、OKが返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.CREATEINDEX idx:product '{"mappings":{"_source":{"enabled":true},"properties":{"product_id":{"type":"keyword","ignore_above":128},"product_name":{"type":"text"},"product_title":{"type":"text","analyzer":"jieba"},
"price":{"type":"double"}}}}'

# Specify a product ID (product_id) of the keyword type and set the length limit of the ID to 128 characters. 
# Specify a product name (product_name) of the text type. 
# Specify a product title (product_title) of the text type and set analyzer to jieba. 
# Specify a price (price) of the double type.

サンプル出力:

OK

TFT.UPDATEINDEX

項目

説明

構文

TFT.UPDATEINDEXインデックスマッピング設定

コマンド説明

propertiesフィールドを指定したインデックスに追加するか、インデックスの設定を変更します。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

  • mappings: マッピングコンテンツ。 新しく追加されたpropertiesフィールドのみを指定する必要があります。 propertiesフィールドが既存のフィールドと競合しないようにしてください。 それ以外の場合、フィールドを追加できません。

  • settings: インデックス設定。 変更できるのは、queries_cachecompress_doc、およびindexフィールドのみです。 indexフィールドでは、Okapi BM25アルゴリズムのk1値とb値のみを変更できます。

説明

マッピングおよび設定パラメーターの詳細については、「TFT.CREATEINDEX」をご参照ください。

Output

  • 操作が成功した場合、OKが返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.UPDATEINDEX idx:product '{"mappings":{"properties":{"product_group":{"type":"text","analyzer":"chinese"}}}}'

サンプル出力:

OK

TFT.GETINDEX

項目

説明

構文

TFT.GETINDEXインデックス

コマンド説明

インデックスのマッピングコンテンツを取得します。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

Output

  • 操作が成功すると、インデックスのJSON形式のマッピングコンテンツが返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.GETINDEX idx:product

サンプル出力:

{"idx:product0310":{"mappings":{"_source":{"enabled":true,"excludes":[],"includes":["product_id"]},"dynamic":"false","properties":{"price":{"boost":1.0,"enabled":true,"ignore_above":-1,"index":true,"similarity":"classic","type":"double"},"product_id":{"boost":1.0,"enabled":true,"ignore_above":128,"index":true,"similarity":"classic","type":"keyword"},"product_name":{"boost":1.0,"enabled":true,"ignore_above":-1,"index":true,"similarity":"classic","type":"text"},"product_title":{"analyzer":"chinese","boost":1.0,"enabled":true,"ignore_above":-1,"index":true,"similarity":"classic","type":"text"}}}}}

TFT.ADDDOC

項目

説明

構文

TFT.ADDDOCインデックスドキュメント [WITH_ID doc_id]

コマンド説明

インデックスにドキュメントを追加します。 WITH_ID doc_IDを使用して、インデックス内のドキュメントの一意のidを指定できます。 ドキュメントIDが既に存在する場合、既存のIDは上書きされます。 WITH_ID doc_idを指定しない場合、ドキュメントIDが自動的に生成されます。 デフォルトでは、WITH_ID doc_idは指定されていません。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

  • document: JSON形式で挿入されるドキュメント。 値は、このフィールドに定義されたデータ型である必要があります。

    説明

    _sourceパラメーターでincludesを指定して特定のフィールドのみを保持する場合、インデックスにドキュメントを追加するとき、またはインデックスに追加されたドキュメントを更新するときに、includesで指定されたフィールドのみが保持されます。

  • WITH_ID doc_id: ドキュメントのIDを設定するかどうかを指定します。 はいの場合、doc_id値として文字列も入力する必要があります。

Output

  • 操作が成功すると、JSON形式のドキュメントIDが返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.ADDDOC idx:product '{"product_id":"product test"}' WITH_ID 00001

サンプル出力:

{"id":"00001"}

追加するサンプル配列:

TFT.ADDDOC idx:product '{"product_id":["an","2","3df"]}' WITH_ID 00001

TFT.MADDDOC

項目

説明

構文

TFT.MADDDOCインデックスドキュメントdoc_id [document1 doc_id1] ...

コマンド説明

インデックスに複数のドキュメントを追加します。 各ドキュメントには、doc_idで指定されたドキュメントIDが必要です。 フォーマットが無効なためにドキュメントの追加に失敗した場合、コマンドに含まれるすべてのドキュメントはインデックスに追加されません。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

  • document: JSON形式で挿入されるドキュメント。 値は、このフィールドに定義されたデータ型である必要があります。

    説明

    _sourceパラメーターでincludesを指定して特定のフィールドのみを保持する場合、インデックスにドキュメントを追加するとき、またはインデックスに追加されたドキュメントを更新するときに、includesで指定されたフィールドのみが保持されます。

  • doc_id: ドキュメントのID。 値は文字列でなければなりません。

Output

  • 操作が成功した場合、OKが返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.MADDDOC idx:product '{"product_id":"test1"}' 00011 '{"product_id":"test2"}' 00012

サンプル出力:

OK

TFT. UPDATEDOCHIELD

項目

説明

構文

TFT.UPDATEDOCFIELDインデックスdoc_idドキュメント

コマンド説明

インデックス内のdoc_idで指定されたドキュメントを更新します。 更新するドキュメントフィールドが、ドキュメントマッピングによって決定される方法でインデックス付けされている場合、フィールドデータ型は、マッピングで指定されたものと同じである必要があります。 更新するフィールドがインデックス付きフィールドでない場合は、任意のデータ型を使用できます。

説明

フィールドが既に存在する場合、ドキュメントは更新されます。 フィールドが存在しない場合は、フィールドが追加されます。 ドキュメントが存在しない場合、ドキュメントは自動的に作成されます。 この場合、コマンドはTFT.ADDDOCに相当します。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

  • doc_id: ドキュメントのID。

  • document: 更新するJSON形式のドキュメントコンテンツ。

    説明

    _sourceパラメーターでincludesを指定して特定のフィールドのみを保持する場合、インデックスにドキュメントを追加するとき、またはインデックスに追加されたドキュメントを更新するときに、includesで指定されたフィールドのみが保持されます。

Output

  • 操作が成功した場合、OKが返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.UPDATEDOCFIELD idx:product 00011 '{"product_id":"test8","product_group":"BOOK"}'

サンプル出力:

OK

TFT. DELDOCHIELD

項目

説明

構文

TFT.DELDOCFIELDインデックスdoc_idフィールド [field1 field2 ...]

コマンド説明

インデックスのdoc_idで指定されたドキュメントから指定されたフィールドを削除します。 フィールドがインデックス付きフィールドである場合、フィールドの情報もインデックスから削除される。

説明

フィールドが存在しない場合、操作は実行できません。 たとえば、フィールドは _sourceを使用して除外されるため、存在しない場合があります。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

  • doc_id: ドキュメントのID。

  • field: 削除するフィールド。

Output

  • 操作が成功すると、削除されたフィールドの数が返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.DELDOCFIELD idx:product 00011 product_group

サンプル出力:

(integer) 1

TFT. INCRLONGDOCHIELD

項目

説明

構文

TFT.INCRLONGDOCFIELDインデックスdoc_idフィールドの増分

コマンド説明

インデックスのdoc_idで指定されたドキュメントの指定されたフィールドに増分を追加します。 増分は、正または負の整数とすることができる。 フィールドのデータ型はLONGまたはINTEGERのみです。

説明

ドキュメントが存在しない場合、ドキュメントは自動的に作成されます。 この場合、フィールドの既存の値は0であり、更新されたフィールド値は、既存のフィールド値に増分値を加算することによって得られる。 フィールドが存在しない場合、操作は実行できません。 たとえば、_sourceを使用して除外されるため、フィールドが存在しない場合があります。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

  • doc_id: ドキュメントのID。

  • field: インクリメントを追加するフィールド。 フィールドのデータ型はLONGまたはINTEGERのみです。 ARRAYデータ型はサポートされていません。

  • increment: フィールドに追加する増分値。 値は正または負の整数です。

Output

  • 操作が成功した場合、更新されたフィールド値が返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.INCRLONGDOCFIELD idx:product 00011 stock 100

サンプル出力:

(integer)100

TFT. INCRFLOATDOCHIELD

項目

説明

構文

TFT.INCRFLOATDOCFIELDインデックスdoc_idフィールドの増分

コマンド説明

インデックスのdoc_idで指定されたドキュメントの指定されたフィールドに増分を追加します。 増分は、正または負の浮動小数点数とすることができる。 フィールドのデータ型はDOUBLEのみです。

説明

ドキュメントが存在しない場合、ドキュメントは自動的に作成されます。 この場合、フィールドの既存の値は0であり、更新されたフィールド値は、既存のフィールド値に増分値を加算することによって得られる。 フィールドが存在しない場合、操作は実行できません。 たとえば、_sourceを使用して除外されるため、フィールドが存在しない場合があります。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

  • doc_id: ドキュメントのID。

  • field: インクリメントを追加するフィールド。 フィールドのデータ型はDOUBLEのみです。 ARRAYデータ型はサポートされていません。

  • increment: フィールドに追加する増分値。 値は、正または負の浮動小数点数とすることができる。

Output

  • 操作が成功した場合、更新されたフィールド値が返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.INCRFLOATDOCFIELD idx:product 00011 stock 299.6

サンプル出力:

"299.6"

TFT.GETDOC

項目

説明

構文

TFT.GETDOCインデックスdoc_id

コマンド説明

インデックスのdoc_idで指定されたドキュメントのコンテンツを取得します。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

  • doc_id: ドキュメントのID。

Output

  • 操作が成功すると、ドキュメントのIDとコンテンツが返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.GETDOC idx:product 00011

サンプル出力:

{"_id":"00011","_source":{"product_id":"test8"}}

TFT.EXISTS

項目

説明

構文

TFT.EXISTSインデックスdoc_id

コマンド説明

doc_idで指定したドキュメントがインデックスに存在するかどうかを確認します。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

  • doc_id: ドキュメントのID。

Output

  • 操作が成功した場合、戻り値はドキュメントが存在するかどうかによって異なります。

    • ドキュメントが存在する場合、値1が返されます。

    • 操作が成功し、フィールドまたはドキュメントが存在しない場合、値0が返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.EXISTS idx:product 00011

サンプル出力:

(integer) 1

TFT.DOCNUM

項目

説明

構文

TFT.DOCNUMインデックス

コマンド説明

インデックス内のドキュメントの数を取得します。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

Output

  • 操作が成功すると、インデックス内のドキュメントの数が返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.DOCNUM idx:product

サンプル出力:

(integer) 3

TFT.SCANDOCID

項目

説明

構文

TFT.SCANDOCIDインデックスカーソル [MATCH * value *] [COUNT count]

コマンド説明

インデックス内のすべてのドキュメントのIDを取得します。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

  • cursor: このスキャンで使用されるカーソル。

  • MATCH * value *: 一致するパターン。 値は、マッチングに使用する値を指定します。 例: MATCH * redis *

  • COUNT count: 一度にスキャンできるドキュメントの最大数。 デフォルト値:100

Output

  • 操作が成功すると、配列が返されます。

    • 配列の最初の要素は、次のスキャンに使用されるカーソルです。 インデックスがスキャンされると、0の値が返されます。

    • 配列の2番目の要素は、このスキャンで取得されたドキュメントのIDです。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.SCANDOCID idx:product 0 COUNT 3

サンプル出力:

1) "0"
2) 1) "00001"
   2) "00011"
   3) "00012"

TFT.DELDOC

項目

説明

構文

TFT.DELDOCインデックスdoc_id [doc_id] ...

コマンド説明

doc_idで指定されたドキュメントをインデックスから削除します。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

  • doc_id: ドキュメントのid。

Output

  • 操作が成功すると、削除されたドキュメントの数が返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.DELDOC idx:product 00011 00014

サンプル出力:

"1"    # In this example, the document with an ID of 00014 does not exist. In this case, only the 00011 document is deleted and a value of 1 is returned.

TFT. デルタ

項目

説明

構文

TFT. DELLLインデックス

コマンド説明

インデックスからすべてのドキュメントを削除しますが、インデックスは保持します。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

  • doc_id: ドキュメントのid。

Output

  • 操作が成功した場合、OKが返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.DELALL idx:product

サンプル出力:

OK

TFT. アナリスト

項目

説明

構文

TFT.ANALYZER analyzer_nameテキスト [INDEX index_name] [SHOW_TIME]

コマンド説明

指定されたアナライザーのトークン化効果を照会します。

パラメーター

  • analyzer_name: アナライザー名。 組み込みアナライザーまたはカスタムアナライザーを指定できます。

    カスタムアナライザー、またはストップワードまたはディクショナリが変更された組み込みアナライザーを指定する場合は、アナライザーが作成されるインデックスの名前も指定する必要があります。

  • text: アナライザーを使用して分割するドキュメント。 ドキュメントはUTF-8形式でエンコードする必要があります。

  • INDEX: アナライザーが作成されるインデックスの名前。 このパラメーターはオプションです。 カスタムアナライザー、またはストップワードまたは辞書を変更した組み込みアナライザーを指定する場合は、このパラメーターが必要です。

  • SHOW_TIME: ドキュメントをトークンに分割するのにかかる時間を返すかどうかを指定します。 このパラメーターはオプションです。 単位:マイクロ秒。

    時間量は、辞書をロードするのにかかる時間を含む。 比較的大きな辞書が最初にロードされるとき、時間の量は数秒に増加し得る。

Output

  • 操作が成功すると、トークン情報はJSON形式で返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.ANALYZER standard "Tair is a nosql database"

サンプル出力:

'{
    "tokens":[
        {
            "token":"Tair",
            "start_offset":0,
            "end_offset":4,
            "position":0
        },
        {
            "token":"nosql",
            "start_offset":10,
            "end_offset":15,
            "position":3
        },
        {
            "token":"database",
            "start_offset":16,
            "end_offset":24,
            "position":4
        }
    ]
}'

TFT. 検索

項目

説明

構文

TFT.SEARCHインデックスクエリ

コマンド説明

インデックス内のドキュメントを照会します。 クエリ構文は、Elasticsearchで使用されるquery Domain Specific Language (DSL) 構文に似ています。 詳細については、「クエリDSL」をご参照ください。

パラメーター

index: このコマンドを実行して管理するインデックスの名前。 query: Elasticsearchで使用される構文に似たQuery DSLステートメント。 次のフィールドがサポートされています。

  • query: クエリ句。 次の構文がサポートされています。

    • match: 基本一致クエリ。 次のパラメーターがサポートされています。

      ドキュメントの文字を個々のトークンに分割する必要がない、またはファジーマッチを必要としないシナリオでは、クエリの効率を向上させるために、termprefixなどのコマンドを使用することをお勧めします。

      • query: クエリを使用して取得されるインデックス内のドキュメント。

        説明
        • ファジー性を使用してファジー一致が無効になっている場合、クエリによって取得されたドキュメントは、アナライザーによって指定されたトークナイザによって個々のトークンに分割されます。 operatorを使用してトークン間の関係を指定し、minimum_should_matchを使用して照合する必要があるトークンの最小数を指定することもできます。

        • あいまいさを使用してあいまい一致を有効にすると、前述のパラメーターは無効になります。 この場合、prefix_lengthを指定できます。

      • analyzer: matchステートメントで使用されるトークナイザー。 有効な値: 標準中国語アラビア語cjkチェコ語ブラジル語ドイツ語ギリシャ語ペルシャ語フランス語オランダ語ロシア語jieba。 デフォルト値は標準で、英語のトークナイザーを示します。 漢字を解析するには、jiebaを使用できます。 詳細については、「検索アナライザー」をご参照ください。

      • minimum_should_match: 一致する必要があるトークンの最小数。 トークナイザは、クエリ文をトークンに分解する。 このパラメーターは、ファジー一致が無効で、operatorがORに設定されている場合に有効になります。

      • operator: トークン間の関係。 有効な値: ANDおよびOR。 デフォルト値: OR。 たとえば、'{"query":{"match":{"f0":{"query":"redis cluster","operator":"OR" }}}}' は、クエリを実行するドキュメントに "redis" または "cluster" が含まれている場合に検索条件が満たされることを指定します。

      • fuzziness: クエリのファジー一致を有効にするかどうかを指定します。 デフォルトでは、ファジーマッチは無効になっています。 "fuzziness":1は、ファジーマッチが有効になることを指定します。 例: '{"query":{"match":{"f0":{"query":"excelentl","fuzziness":1 }}}'

      • prefix_length: ファジー一致のために保持する必要がある開始文字の数。 デフォルト値:0 このパラメーターは、ファジー一致が有効な場合にのみ有効です。

    • term: トークンクエリ。 このパラメーターを指定した場合、クエリ文は分割されません。 このクエリタイプは、一致クエリよりも効率的です。 このパラメーターは、すべてのフィールドタイプをサポートします。 トークンクエリを実行するときに、小文字のパラメーターを設定して、クエリするトークンを小文字に変換できます。 小文字のパラメーターの有効な値はtrueとfalseです。 デフォルト値はtrueです。 例: '{"query":{"term":{"f0":{"value":"redis" 、"boost": 2.0 }}}}' および '{"query":{"term":{"f0":{"value":"redis" 、"lowercase": false }}}' '。

      ドキュメントを追加するときに使用するアナライザーがドキュメントを小文字に変換しない場合は、小文字のパラメーターをfalseに設定することを推奨します。 そうでなければ、ドキュメントが見つからない可能性があります。

    • terms: マルチトークンクエリ。 各マルチトークンクエリでは、最大1024個のトークンが許可されます。 トークンクエリを実行するときに、小文字のパラメーターを設定して、クエリするトークンを小文字に変換できます。 小文字のパラメーターの有効な値はtrueとfalseです。 デフォルト値はtrueです。 例: '{"query":{"terms":{"f0":["redis","excellent"]}}'

      ドキュメントを追加するときに使用するアナライザーがドキュメントを小文字に変換しない場合は、小文字のパラメーターをfalseに設定することを推奨します。 そうでなければ、ドキュメントが見つからない可能性があります。

    • range: 範囲クエリ。 このパラメーターは、すべてのフィールドタイプをサポートします。 有効な値: It (未満) 、gt (大) 、Ite (未満または等しい) 、およびgte (大または等しい) 。 例: '{"query":{"range":{"f0":{"lt":"abcd","gt":"ab" }}}'

    • wildcard: ワイルドカードクエリ。 パラメーター値の形式: "wildcard":{"field to query":{"value":"query content"}} サポートされているワイルドカード: *? 例: '{"query":{"wildcard":{"f0":{"value":"* b?Se" }}}}'

    • prefix: プレフィックスクエリ。 たとえば、'{"query":{"prefix":{"f0":"abcd"}}' は、f0フィールドがabcdで始まるドキュメントを照会することを指定します。

    • bool: 複合クエリ。 各複合クエリでは、最大1,024個のトークンが許可されます。 有効な値:

      • must: クエリ結果は、必須リスト内のすべてのクエリ句と一致する必要があります。 たとえば、'{"query":{"bool":{"must":[{"match":{"DB":"redis" }},{ "match":{"Architectures":"cluster"}}]}}' は、クエリするデータベースのタイプがRedisであり、データベースを含むインスタンスのアーキテクチャがクラスターであることを指定します。

      • must_not: クエリ結果は、must_notリスト内のどのクエリ句とも一致しません。

      • should: リストが必要です。 boolがshouldに設定されている場合、クエリ結果はこのリストの1つのクエリ句と一致する必要があります。 minimum_should_matchパラメーターを設定できます。

      • minimum_should_match: 一致する必要があるクエリ句の最小数を指定します。 このパラメータはshouldと共に使用する必要があります。 boolステートメントにshouldのみが含まれる場合、minimum_should_matchはデフォルトで1に設定されます。 boolステートメントにmustまたはmust_notも含まれる場合、minimum_should_matchはデフォルトで0に設定されます。 たとえば、'{"query":{"bool":{"minimum_should_match":1,"should":[{"match":{"DB":"redis" }},{ "match":{"Architectures":"cluster"}}]}}}'は、クエリするデータベースのタイプがRedisであるか、データベースを含むインスタンスのアーキテクチャがクラスターであることを指定します。

      説明

      boolステートメントには、bool句など、すべての種類のクエリ句をネストできます。 例:TFT. 検索idx:product '{"query":{"bool":{"must":[{"term":{"product_name":"apple" }},{ "bool":{"minimum_should_match":1,"should":[{"term":{"price" 19.5 }}}," term ":" fruits_2 "}}]}}]}}}'.

    • dis_max: ベストマッチの複合クエリ。 既定では、このパラメーターは1つ以上のクエリ句に一致するドキュメントを返します。 返されたドキュメントが複数のクエリ句と一致する場合、tie_breakerが指定されている場合、dis_maxクエリは、一致する句からの最も高いスコアと、ドキュメントスコアにタイブレークの増分を割り当てます。

      tie_breakerの有効値: 0〜1。 デフォルト値:0 tie_breakerが指定された後、ドキュメントスコアは次の式に基づいて計算できます。最高のスコアを持つ一致句からのスコア + (他の一致句からのスコア × tie_breaker値) 。 doc1が、ドキュメントスコアが5、1、および3である3つのクエリ句と一致し、0.5のtie_break値が指定されていると仮定します。 この場合、doc1のスコアは、doc1のスコア=5 + [(1 + 3) × 0.5] の式を用いて算出することができる。

      例: '{"query":{"dis_max":{"queries":[{"term":{"f0":"redis" }},{ "term":{"f1":"database" }},{ "match":{"title":"redis memory database"}}] 、"tiee_breaker": 0.5}}'

    • constit_score: 定数スコアを返す複合クエリ。 このクエリは別のクエリをラップし、フィルター内のすべてのドキュメントのクエリブーストに等しい定数スコアを返します。 ブースト値はDOUBLEタイプで、デフォルトのブースト値は1.0です。 例: '{"query":{"constant_score":{"filter":{"term":{"f0":"abc" }}, "boost":1.2 }}}'

    • match_all: すべてのクエリに一致します。 このクエリはすべてのドキュメントに一致し、すべてブースト値を与えます。 ブースト値はDOUBLEタイプで、デフォルトのブースト値は1.0です。 例: '{"query":{"match_all":{"boost":2.3 }}}'

    説明

    booldis_max、およびconstant_scoreを使用して複合クエリを実行する場合、termtermsrange、およびワイルドカードのブースト値を設定できます。 デフォルトのブースト値は1です。 クエリ構文でブースト値を適用するパラメーターを指定する必要があります。 例: '{"query":{"bool":{"must":[{"match":{"f0":"v0" }}, "term":{"f0":{"value":"redis","boost":2}}]}}}}'

  • sort: クエリ結果を要素ごとに並べ替えます。 ARRAYデータ型はサポートされていません。 デフォルト値: _score。 有効な値:

    • _score: クエリ結果を重みで降順に並べ替えます。 例: "sort":"_score"

    • _doc: クエリ結果をドキュメントIDで昇順に並べ替えます。 例: "sort":"_doc"

    • 指定されたフィールド: クエリ結果を指定されたフィールドで昇順に並べ替えます。 フィールドは、インデックス付きフィールド (インデックスをtrueに設定) または強制的にチェックされたフィールド (有効にtrueに設定) である必要があります。 フィールドは、キーワード、long、integer、またはdouble型である必要があります。 たとえば、"sort":"price" は、クエリ結果を価格で昇順にソートすることを指定します。

    配列を使用してクエリ結果をソートすることもできます。 この場合、クエリ結果は配列順にソートされます。 orderを使用して、デフォルトの配列順序を変更できます。 order: descおよびacsの有効な値。 たとえば、'{"sort":[{"price":{"order":"desc" }},{ "_doc":{"order":"desc"}}}]}' は、クエリ結果を価格でソートするか、価格が同じ場合はドキュメントIDでソートします。

  • _source: クエリ結果に表示されるフィールド。 includesを使用して保持するフィールドを指定し、excludesを使用して保持しないフィールドを指定できます。 ワイルドカードは受け入れられます。 たとえば、"_source":{"include":["f0"] は、クエリ結果のf0フィールドのみを返すように指定します。

  • aggs: query句の結果を集計します。 フィールドがARRAYデータ型の場合、用語の集計のみがサポートされます。 詳細については、「集計」をご参照ください。

  • track_total_hits: termterms、またはmatchクエリを使用するときに、すべてのドキュメントをクエリするかどうかを指定します。 この場合、複合クエリがサポートされます。 一致クエリを使用すると、あいまい一致は無効になります。 有効な値:

    • false: 上位100のドキュメントのみが照会されます。 ドキュメントはスコアでソートされます。

    • true: すべてのドキュメントが照会されます。

      警告

      track_total_hitsがtrueに設定され、クエリするドキュメントの数が多い場合、クエリが遅くなります。 作業は慎重に行ってください。

  • from: 返す開始ドキュメント。 デフォルト値は0で、最初のドキュメントとそれ以降のクエリ対象のすべてのドキュメントを返すように指定します。

  • size: 返すことができるドキュメントの数。 デフォルト値は 10 です。 有効な値: 0 ~ 10000 値0は、特定のドキュメントではなく、取得したドキュメントの総数のみを返すことを指定します。

    説明

    からサイズの組み合わせは、ページングのように機能します。 ただし、個別のページ数が増えると、クエリのパフォーマンスが低下します。

Output

  • 操作が成功すると、インデックス内のドキュメントが返されます。

    説明

    次のサンプル出力では、relationは返されたドキュメントの数を示します。 relationの有効な値: eq (valueで指定された値に等しい) およびgte (valueで指定された値以上) 。

    {
        "hits": {
            "hits": [],
            "max_score": null,
            "total": {
                "relation": "gte",
                "value": 100
            }
        }
    }
  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.SEARCH idx:product '{"sort":[{"price":{"order":"desc"}}]}'

サンプル出力:

{"hits":{"hits":[{"_id":"fruits_3","_index":"idx:product","_score":1.0,"_source":{"product_id":"fruits_3","product_name":"orange","price":30.2,"stock":3000}},{"_id":"fruits_2","_index":"idx:product","_score":1.0,"_source":{"product_id":"fruits_2","product_name":"banana","price":24.0,"stock":2000}},{"_id":"fruits_1","_index":"idx:product","_score":1.0,"_source":{"product_id":"fruits_1","product_name":"apple","price":19.5,"stock":1000}}],"max_score":1.0,"total":{"relation":"eq","value":3}}}

TFT.MSEARCH

項目

説明

構文

TFT.MSEARCH index_count index [index1] ... クエリ

コマンド説明

クエリ句を使用して、マッピング設定が同じ値に設定されている複数のインデックスのドキュメントをクエリし、これらのインデックスから結果を収集します。 次に、結果が評価され、ソートされ、集計され、返されます。

説明

TFT.MSEARCHコマンドの出力は、これらのインデックスからのクエリ結果のレーティング、ソート、および集約の結果です。 出力は、データセットを複数のインデックスで直接評価、並べ替え、集計して生成された結果とは異なります。 TFT.MSEARCHポリシー:

  • レートとソート: 子結果セットのレートとソート。

  • 集約:

    • sum、max、min、avg、またはvalue_count: 集計関数を使用して、子結果セットに対して集計操作を実行します。

    • sum_of_squares、variance、またはstd_deviation: 子結果セットに対して平均化操作を実行します。

    • terms aggregationまたはfilter aggregation: 子結果セットに対して別の集計操作を実行します。

パラメーター

  • index_cout: クエリするインデックスの数。 設定可能な値は 1~100 です。

  • index: このコマンドを実行して管理するインデックスの名前。 これらのインデックスには、マッピング設定が同じ値に設定されている必要があります。 インデックスごとにマッピングの設定が異なる場合、またはインデックスが存在しない場合は、エラーが報告されます。

  • query: 集計ステートメント。 以下のパラメーターがサポートされます。

    • query: クエリ句。

    • sort: クエリ結果を要素ごとに並べ替えます。 ARRAYデータ型はサポートされていません。

    • _source: 結果で返されるフィールド。

    • aggs: クエリ句の結果を集計します。 フィールドがARRAYデータ型の場合、用語の集計のみがサポートされます。

    • track_total_hits: 用語、用語、または一致クエリを使用するときにすべてのドキュメントをクエリするかどうかを指定します。 この場合、複合クエリがサポートされます。 一致クエリを使用すると、あいまい一致は無効になります。

    • size: 返されるドキュメントの数。

      ページングされたクエリは、sizereply_with_keys_cursor、およびkeys_cursorを使用して実装できます。 key_cursorがデフォルト値0に設定されている場合、Tairは、インデックスから取得された結果の最初のドキュメントから始まる指定された数のドキュメントを取得します。 key_cursorが0に設定されていない場合、特定の位置から特定の数のドキュメントが取得されます。 次に、これらのインデックスからの結果が収集され、評価、ソート、集計され、出力として返されます。

      たとえば、3つのインデックスkey0、key1、key2を一度にクエリし、sizeパラメーターを10に設定したとします。

      • 最初のクエリでは、keys_cursorを0に設定します。 Tairは、これら3つのインデックスから最初の10個のドキュメントをそれぞれ取得します。 次に、Tairはこれらの30のドキュメントを収集、評価、ソート、および集約し、上位10のドキュメントを返します。 keys_cursorのサンプル戻り値: {"keys_cursor":{"key0":2,"key1":5,"key2":3}}

      • 2番目のクエリについては、同じクエリステートメントを使用し、{"keys_cursor":{"key0":2,"key1":5,"key2":3}} を追加します。 Tairは、これらのインデックスの指定された位置から最初の10個のドキュメントを取得します。 たとえば、Tairは、key0インデックスの3番目から始まる10個のドキュメントを取得します。 次に、Tairは取得したドキュメントを収集、評価、ソート、および集計し、出力を返します。

    • reply_with_keys_cursor: 各インデックスの次のクエリの開始位置を返すかどうかを指定します。 有効な値は、true および false です。 デフォルト値:false

    • key_cursor: クエリの各インデックス内のカーソルの位置を指定します。 ページ化クエリを実装するには、keys_cursorを最後のクエリの戻り値に設定します。 デフォルト値は0で、クエリが最初のドキュメントから始まることを示します。

説明

TFT.SEARCHコマンドのqueryステートメントとは異なり、TFT.MSEARCHコマンドのqueryステートメントはfromパラメーターをサポートしませんが、sizereply_with_keys_cursor、およびkeys_cursorパラメーターを使用してページングされたクエリをサポートします。 他のパラメーターの構文の詳細については、「TFT.SEARCH」をご参照ください。

Output

  • 操作が成功した場合、取得したドキュメントとaux_infoが返されます。これは、TFT.SEARCHコマンドの出力と同様です。

    aux_infoフィールドには、mappingおよびsettingsのCRC-64値、keys_cursorの値、およびfield_typeの値が含まれます。 keys_cursorは、次のクエリのカーソル位置を示し、オプションです。 field_typeはフィールドのデータ型を示し、データがインデックスフィールドでソートされている場合にのみ返されます。 ビジネスリクエストの場合、CRC-64値は無視してください。 aux_infoの例:

    {
        "aux_info":{
            "index_crc64":15096806844241479487,
            "keys_cursor":{
                "key0":2,
                "key1":5,
                "key2":3
            },
            "field_type":{
                "f0":"long"
            }
        }
    }
  • それ以外の場合、エラーメッセージが返されます。

例:

事前に次のコマンドを実行します。

TFT.CREATEINDEX key0 '{"mappings":{"properties":{"f0":{"type":"long"}}}}'
TFT.CREATEINDEX key1 '{"mappings":{"properties":{"f0":{"type":"long"}}}}'
TFT.CREATEINDEX key2 '{"mappings":{"properties":{"f0":{"type":"long"}}}}'
TFT.ADDDOC key0 '{"f0":120}'
TFT.ADDDOC key0 '{"f0":130}'
TFT.ADDDOC key1 '{"f0":140}'
TFT.ADDDOC key1 '{"f0":150}'
TFT.ADDDOC key2 '{"f0":160}'
TFT.ADDDOC key2 '{"f0":170}'

サンプルコマンド:

TFT.MSEARCH 3 key0 key1 key2 '{"size":2,"query":{"range":{"f0":{"gt":120,"lte":170}}},"sort":[{"f0":{"order":"desc"}}],"reply_with_keys_cursor":true}'

サンプル出力:

{"hits":{"hits":[{"_id":"16625439765504840","_index":"key2","_score":1.0,"_source":{"f0":170}},{"_id":"16625439741096630","_index":"key2","_score":1.0,"_source":{"f0":160}}],"max_score":1.0,"total":{"relation":"eq","value":5}},"aux_info":{"index_crc64":10084399559244916810,"keys_cursor":{"key0":0,"key1":0,"key2":2}}}

2ページ目を照会するためのサンプルコマンド:

TFT.MSEARCH 3 key0 key1 key2 '{"size":2,"query":{"range":{"f0":{"gt":120,"lte":170}}},"sort":[{"f0":{"order":"desc"}}],"reply_with_keys_cursor":true,"keys_cursor":{"key0":0,"key1":0,"key2":2}}'
# Use the statement that you use in the first query and include the keys_cursor information from the previous query.

サンプル出力:

{"hits":{"hits":[{"_id":"16625439652681160","_index":"key1","_score":1.0,"_source":{"f0":150}},{"_id":"16625439624704580","_index":"key1","_score":1.0,"_source":{"f0":140}}],"max_score":1.0,"total":{"relation":"eq","value":5}},"aux_info":{"index_crc64":10084399559244916810,"keys_cursor":{"key0":0,"key1":2,"key2":2}}}

TFT.EXPLAINCOST

項目

説明

構文

TFT.EXPLAINCOSTインデックスクエリ

コマンド説明

クエリ文の実行期間を照会します。 出力には、クエリに含まれるドキュメントの数と、クエリの各操作で消費される時間が含まれます。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

  • query: TFT.SEARCHコマンドと同じ構文を持つクエリステートメント。

Output

  • 操作が成功すると、出力はJSON形式で返されます。 出力には次の項目を含めることができます。

    • QUERY_COST: クエリの実行時間。 このパラメーターには、time_cost_us、query、doc_numの3つのフィールドがあります。 time_cost_usはクエリの合計実行時間をミリ秒単位で示し、queryはクエリの種類を示し、doc_numはクエリに含まれるドキュメントの数を示します。 boolステートメントが使用されている場合、boolステートメントの実行に費やされた時間を示すstepsフィールドが表示されます。

    • AGGS_COST: クエリに含まれる集計によって消費される時間。 このパラメーターには、time_cost_usフィールドも含まれます。 クエリ文で集計が指定されていない場合、このパラメーターは返されません。

    • COLLECTOR_COST: 結果の収集と並べ替えにかかる時間。 このパラメーターには、time_cost_usとcollector_typeの2つのフィールドがあります。 collector_typeは、収集されたエントリをソートするために使用されるコレクターのタイプを示します。 collector_typeの有効な値: ScoreCollectorとCustomSortCollector。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.EXPLAINCOST idx:product '{"sort":[{"price":{"order":"desc"}}]}'

サンプル出力:

{
    "QUERY_COST": {
        "query": "MATCHALL_QUERY",
        "doc_num": 1,
        "time_cost_us": 2
    },
    "COLLECTOR_COST": {
        "collector_type": "CustomSortCollector",
        "time_cost_us": 20
    }
}

TFT.EXPLAINSCORE

項目

説明

構文

TFT.EXPLAINSCOREインデックスクエリ [doc_id] ...

コマンド説明

クエリステートメントの実行結果のドキュメントの詳細なスコア情報を照会します。 このコマンドを使用すると、ドキュメントスコアの計算方法についての洞察を得ることができます。 次に、検索クエリを最適化して、ドキュメント検索の有効性を高めることができます。

このコマンドは、Redis 6.0と互換性のあるDRAMベースのインスタンスでのみ使用できます。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

  • query: TFT.SEARCHコマンドと同じ構文を持つクエリステートメント。

  • doc_id: ドキュメントのid。 このパラメーターを指定すると、doc_idで指定されたドキュメントのみが返されます。

Output

  • 操作が成功した場合、照会されたドキュメントの情報が返されます。 各ドキュメントの詳細なスコア情報は、通常、_descriptionオブジェクトとして表され、TFT.SEARCHコマンドによって返される基本結果セットに追加されます。 _descriptionオブジェクトには、次のフィールドが含まれます。

    • score: ドキュメントのスコア。

    • description: スコア計算に使用される式。

    • field: クエリで指定された用語と一致するドキュメントのフィールド。

    • term: ドキュメント内で見つかったクエリからの用語。

    • query_boost: クエリ内のドキュメントに適用されるスコアの重み。

    • details: ドキュメントのメタデータとスコアリングプロセス。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.EXPLAINSCORE today_shares '{"query":{"wildcard":{"shares_name":{"value":"*BY"}}}}'

サンプル出力:

{
    "hits": {
        "hits": [
            {
                "_id": "17036492095306830",
                "_index": "today_shares",
                "_score": 1.0,
                "_source": {
                    "shares_name": "YBY",
                    "logictime": 14300410,
                    "purchase_type": 1,
                    "purchase_price": 11.1,
                    "purchase_count": 100,
                    "investor": "Mila"
                },
                "_explanation": {
                    "score": 1.0,
                    "description": "score, computed as query_boost",
                    "field": "shares_name",
                    "term": "*BY",
                    "query_boost": 1.0
                }
            }
        ],
        "max_score": 1.0,
        "total": {
            "relation": "eq",
            "value": 1
        }
    }
}

TFT.ADDSUG

項目

説明

構文

TFT.ADDSUGインデックステキストの重み [テキストの重み] ...

コマンド説明

1つ以上のオートコンプリートテキストエントリとその重みを指定されたインデックスに追加します。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

  • text: インデックスに追加するオートコンプリートテキストエントリ。

  • weight: テキストの重み。 重みは正の整数でなければなりません。

Output

  • 操作が成功した場合、追加されたテキストエントリの数が返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.ADDSUG idx:redis 'redis is a memory database' 3 'redis cluster' 10

サンプル出力:

(integer) 2

TFT.DELSUG

項目

説明

構文

TFT.DELSUGインデックステキスト [text] ...

コマンド説明

指定したインデックスから1つ以上のオートコンプリートテキストエントリを削除します。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

  • text: インデックスから削除するテキストエントリ。 テキスト入力は完全かつ正確でなければなりません。

Output

  • 操作が成功すると、削除されたテキストエントリの数が返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.DELSUG idx:redis 'redis is a memory database' 'redis cluster' 

サンプル出力:

(integer) 2

TFT.SUGNUM

項目

説明

構文

TFT.SUGNUMインデックス

コマンド説明

指定されたインデックス内のオートコンプリートテキストエントリの数を取得します。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

Output

  • 操作が成功した場合、インデックス内のテキストエントリの数が返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.SUGNUM idx:redis

サンプル出力:

(integer) 3

TFT.GETSUG

項目

説明

構文

TFT.GETSUGインデックスプレフィックス [MAX_COUNT count] [FUZZY]

コマンド説明

指定されたプレフィックスに基づいて一致する自動補完テキストエントリを取得します。 テキストエントリは、重みの降順で返されます。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

  • prefix: 指定するプレフィックス。

  • MAX_COUNT count: 返すことができるテキストエントリの最大数。 有効な値:0~255 。

  • FUZZY: ファジーマッチを有効にするかどうかを指定します。

Output

  • 操作が成功した場合、オートコンプリートテキストエントリのリストが返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.GETSUG idx:redis res MAX_COUNT 2 FUZZY

サンプル出力:

1) "redis cluster"
2) "redis lock"

TFT.GETALLSUGS

項目

説明

構文

TFT.GETALLSUGSインデックス

コマンド説明

指定したインデックス内のすべてのオートコンプリートテキストエントリを取得します。

パラメーター

  • index: このコマンドを実行して管理するインデックスの名前。

Output

  • 操作が成功した場合、オートコンプリートテキストエントリのリストが返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

TFT.GETALLSUGS idx:redis

サンプル出力:

1) "redis cluster"
2) "redis lock"
3) "redis is a memory database"

集約

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などの数値型です。 ネストされた集計はサポートされません。 有効な値:

  • sum: 合計値を計算します。

  • max: 最大値を計算します。

  • min: 最小値を計算します。

  • avg: 平均値を計算します。

  • sum_of_squares: 平方和を計算します。

  • variance: 分散を計算します。

  • std_deviation: 標準偏差を計算します。

  • value_count: 値の数をカウントします。 重複した値がカウントされます。 数値およびキーワードタイプのフィールドがサポートされています。

  • extended_stats: 上記のすべての型の集計を実行し、一度に結果を返します。

説明

value_countを除くすべてのパラメーターは、数値フィールドのみをサポートします。

出力: 特定のフィールドから計算されたダブルタイプの値。

用語の集約

値の重複排除数を計算します。 keywordタイプのフィールドのみがサポートされています。 ネストされた集計がサポートされます。 有効な値:

  • 条件

    • field: 集計フィールド。 keywordタイプのフィールドのみがサポートされています。

    • size: 返すことができる用語の数。 デフォルト値は 10 です。 有効な値: [1,65536] 。

    • order: 返された用語のソートルール。 デフォルト値: _count。 有効な値:

      • _count :_countで用語を並べ替えます。 これは、用語が各用語に関連する文書の数に基づいてソートされることを示す。 デフォルト値:desc (降順)。 有効な値: descおよびasc。 例: "order":{"_count":"desc"}

      • _key: 結果を_keyで並べ替えます。 これは、用語が辞書式の順序でソートされることを示します。 有効な値: descおよびasc。 例: "order":{"_key":"desc"}

    • min_doc_count: 表示できるドキュメントの最小数。 デフォルトの値は1です。 ドキュメントの数がmin_doc_count値より少ない場合、その数は表示されません。

    • include: 含まれる、または一致する文字列。 フィールドが文字列の場合、正規表現の一致がサポートされます。 フィールドが配列の場合は、完全一致が必要です。

    • exclude: 包含または照合できない文字列。 サポートされるフィールドタイプは、includeでサポートされるフィールドタイプと同じです。 includeexcludeの両方が指定されている場合、includeexcludeよりも優先されます。

例:

{
  "aggs": {
    "Per_Investor_Freq":{
      "terms": {
        "field": "investor"
      }
    }
  }
}

出力: キー集約を使用して取得されたJSONオブジェクト。 オブジェクトでは、キー集計はバケットを使用して統計を表示します。 各バケットは、キー (集約フィールド) およびdoc_count値 (集約フィールドに関連付けられたドキュメントの数) を含む。 例:

{
  "aggregations": {
    "Per_Investor_Freq": {
      "buckets": [
        {
          "doc_count": 2,
          "key": "Jay"
        },
        {
          "doc_count": 1,
          "key": "Mila"
        }
      ]
    }
  }
 }

フィルター集約

queryステートメントのクエリ結果をフィルターします。 ネストされた集計がサポートされます。

出力: フィルター条件に一致するドキュメントの数 (doc_count) 。

集計の例

  1. インデックスを作成します。

    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
  2. ドキュメントデータを追加します。

    以下のコマンドを実行します。

    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
  3. クエリを実行します。

    サンプルコマンド:

    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}}}}