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

Tair (Redis® OSS-Compatible):検索

最終更新日:Nov 09, 2025

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

  1. 2022 年 3 月 11 日、Tair V1.7.27 とともに TairSearch がリリースされました。

  2. 2022 年 5 月 24 日、Tair V1.8.5 がリリースされ、TairSearch 集約機能のサポートが追加されました。

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

  4. 2023 年 1 月 13 日、Tair V5.0.25 がリリースされ、アナライザのサポートが追加されました。

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

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

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

  1. 2023 年 2 月 7 日、Tair V6.2.4.1 がリリースされ、TairSearch のサポートが追加されました。

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

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

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

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

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

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

Redis 7.0 互換 DRAM ベースインスタンス

  1. 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. 全文検索コマンド

コマンド

構文

説明

TFT.CREATEINDEX

TFT.CREATEINDEX index mappings settings

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

TFT.UPDATEINDEX

TFT.UPDATEINDEX index mappings settings

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

TFT.GETINDEX

TFT.GETINDEX index

インデックスのマッピング内容を取得します。

TFT.ADDDOC

TFT.ADDDOC index document [WITH_ID doc_id]

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

TFT.MADDDOC

TFT.MADDDOC index document doc_id [document1 doc_id1] ...

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

TFT.UPDATEDOCFIELD

TFT.UPDATEDOCFIELD index doc_id document

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

説明

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

TFT.DELDOCFIELD

TFT.DELDOCFIELD index doc_id field [field1 field2 ...]

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

説明

指定されたフィールドが存在しない場合 (たとえば、_source によって除外されたフィールド)、操作は失敗します。

TFT.INCRLONGDOCFIELD

TFT.INCRLONGDOCFIELD index doc_id field increment

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

説明

ドキュメントが存在しない場合、ドキュメントは自動的に作成されます。 この場合、フィールドの既存の値は 0 であり、更新されたフィールド値は、既存のフィールド値に増分値を追加することによって取得されます。 フィールドが存在しない場合 (たとえば、_source によって除外された場合)、操作は失敗します。

TFT.INCRFLOATDOCFIELD

TFT.INCRFLOATDOCFIELD index doc_id field increment

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

説明

ドキュメントが存在しない場合、ドキュメントは自動的に作成されます。 この場合、フィールドの既存の値は 0 であり、更新されたフィールド値は、既存のフィールド値に増分値を追加することによって取得されます。 フィールドが存在しない場合 (たとえば、_source によって除外された場合)、操作は失敗します。

TFT.GETDOC

TFT.GETDOC index doc_id

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

TFT.EXISTS

TFT.EXISTS index doc_id

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

TFT.DOCNUM

TFT.DOCNUM index

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

TFT.SCANDOCID

TFT.SCANDOCID index cursor [MATCH *value*] [COUNT count]

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

TFT.DELDOC

TFT.DELDOC index doc_id [doc_id] ...

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

TFT.DELALL

TFT.DELALL index

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

TFT.ANALYZER

TFT.ANALYZER analyzer_name text [INDEX index_name] [SHOW_TIME]

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

TFT.SEARCH

TFT.SEARCH index query

クエリ文に基づいてインデックス内のドキュメントを検索します。 クエリ構文は Elasticsearch 構文に似ています。

TFT.MSEARCH

TFT.MSEARCH index_count index [index1] ... query

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

TFT.EXPLAINCOST

TFT.EXPLAINCOST index query

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

TFT.EXPLAINSCORE

TFT.EXPLAINSCORE index query [doc_id] ...

クエリ文の実行から得られるドキュメントの詳細なスコア情報をクエリします。 このコマンドを使用して、ドキュメントのスコアがどのように計算されるかのプロセスについての洞察を得ることができます。 その後、検索クエリを最適化して、ドキュメント取得の有効性を高めることができます。

DEL

DEL key [key ...]

ネイティブの Redis DEL コマンドを使用して、1 つ以上の TairSearch キーを削除できます。

表 2. オートコンプリートコマンド

コマンド

構文

説明

TFT.ADDSUG

TFT.ADDSUG index text weight [text weight] ...

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

TFT.DELSUG

TFT.DELSUG index text [text] ...

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

TFT.SUGNUM

TFT.SUGNUM index

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

TFT.GETSUG

TFT.GETSUG index prefix [MAX_COUNT count] [FUZZY]

指定されたプレフィックスに基づいて一致させることができるオートコンプリートテキストを取得します。 テキストは重みの降順で返されます。

TFT.GETALLSUGS

TFT.GETALLSUGS index

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

説明

次の一覧は、この Topic で使用されるコマンド構文の規則について説明しています。

  • 大文字のキーワード: コマンドキーワードを示します。

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

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

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

  • ...: この記号の前のパラメーターを繰り返し指定できることを示します。

TFT.CREATEINDEX

項目

説明

構文

TFT.CREATEINDEX index mappings settings

コマンドの説明

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

説明

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

パラメーター

  • index: 作成するインデックスの名前。

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

    • dynamic: マッピングモード。 strict マッピングモードがサポートされており、properties で定義されたフィールドにのみデータを書き込むことができます。 未定義のフィールドにデータを書き込もうとすると失敗します。 このパラメーターが指定されていない場合、デフォルトで非 strict マッピングモードが使用され、システムは書き込まれるフィールドが properties で定義されているかどうかをチェックしません。

    • enabled: 書き込むドキュメントのフィールドタイプが properties で指定されたタイプと同じであるかどうかを強制的にチェックするかどうかを指定します。 タイプが異なる場合、書き込み操作は失敗します。 有効値: true (デフォルト) および false。 このパラメーターは、インデックス付けされていないフィールド (index が false に設定) にのみ適用されます。 インデックス付きフィールドのフィールドタイプは、常に強制的にチェックされます。

    • _source: 元のドキュメントを保存するかどうかを指定します。 このパラメーターは、フィールドインデックスの作成には影響しません。 有効値:

      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 (デフォルト): インデックス付きフィールド。 インデックス付きフィールドを使用してのみドキュメントをクエリできます。

          Tair は、すべてのインデックスフィールドの元のドキュメントをメモリに保存します。 フィールドが _source で保存しないように構成されている場合、クエリによって返される元のドキュメントには含まれません。

        • false: フィールドはインデックス付けされていないフィールドです。

      • boost: フィールドの重み。 デフォルト値: 1。 パラメーター値は正の浮動小数点数である必要があります。 Tair は、各フィールドの推定相対スコアを自動的に計算します。

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

        説明

        たとえば、keyword の配列型は keyword[] であり、他のデータの型も同様に定義されます。 例: TFT.CREATEINDEX idx:pro '{"mappings":{"properties":{"f0":{"type":"keyword[]"}}}}'

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

          • ignore_above: keyword の最大文字列長。 デフォルト値は 128 です。 たとえば、"ignore_above":128

          • similarity: 類似性アルゴリズム。 有効値: classic (デフォルト、TF-IDF アルゴリズムを示す) および BM25 (Okapi BM25 アルゴリズム)。 例: TFT.CREATEINDEX idx:pro '{"mappings":{"properties":{"fs0":{"type":"keyword","similarity":"BM25"}}}}'settings で BM25 アルゴリズムのパラメーターをカスタマイズすることもできます。

        • text: アナライザによって解析され、インデックスに保存できる文字列。 有効値:

          • analyzer: text を解析し、結果をインデックスに保存します。

            • TairSearch の組み込みアナライザ (standard (デフォルト)、jieba (chinese よりも優れた推奨中国語アナライザ)、stopIKpatternwhitespacesimplekeywordchinesefrenchdutchrussian など) を選択できます。 たとえば、"analyzer":"jieba" は Jieba 中国語アナライザが使用されることを示します。 詳細については、「組み込みアナライザ」をご参照ください。

            • カスタムアナライザを定義することもできます。たとえば、"analyzer":"my_custom_analyzer" のように定義し、settingsanalysis パラメーターを使用してアナライザを構成します。

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

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

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

        • integer: INTEGER データ型。

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

  • settings (オプション): インデックスの設定。 次のオプションがサポートされています。

    • analysis: カスタムアナライザ。 詳細については、「カスタムアナライザ」をご参照ください。

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

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

      • b: ドキュメントサイズと特定の term の重み付けとの関連性。 値が大きいほど、ドキュメントサイズと重み付けの関連性が高くなります。 デフォルト値: 0.75。 有効値: 0 から 1。

    • queries_cache: ドキュメントをクエリするとき、TairSearch はクエリ結果をクエリキャッシュに保存することをサポートします。 デフォルトでは、キャッシュはメモリ制限なしで最大 10,000 件のクエリ結果を保存します。 制限に達すると、結果は Least Recently Used (LRU) アルゴリズムに基づいて削除されます。 queries_cache パラメーターを使用して、クエリキャッシュの最大メモリと Time to Live (TTL) を構成できます。 構成後、クエリキャッシュの最大メモリは size パラメーターによって決定されます。 パラメーターには次のフィールドがあります。

      • size: データ型: STRING。 すべてのクエリキャッシュの最大メモリサイズ。 このメモリ制限に達すると、クエリ結果も LRU アルゴリズムに基づいて削除されます。

        このパラメーターのデフォルト単位はバイトです。 たとえば、"size": "1000" は、クエリキャッシュに最大 1000 バイトを指定します。 「kb」および「mb」の単位もサポートされています。たとえば、"size": "10kb""size": "1mb" などです。

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

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

      queries_cache パラメーターはノードレベルのパラメーターです。 インデックスに対してこのパラメーターを構成すると、同じプロセス内の他のインデックスも影響を受けます。 したがって、すべてのインデックスで同じ queries_cache 構成を使用することをお勧めします。

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

      • size: 圧縮のしきい値を指定する文字列。 インデックスは、そのサイズがこのしきい値に達した場合にのみ圧縮されます。 デフォルト値は "10kb" です。

        このパラメーターのデフォルト単位はバイトです。 「kb」および「mb」を単位として使用することもできます。 たとえば、"size": "1000""size": "10kb""size": "1mb" などです。

      • enable: ドキュメント圧縮機能を有効にするかどうかを指定するブール値パラメーター。 有効な値は false (デフォルト) と true です。

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

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

レスポンスパラメーター。

  • 操作が成功すると、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"}}}}'

# keyword 型のプロダクト ID (product_id) を指定し、ID の長さ制限を 128 文字に設定します。
# text 型のプロダクト名 (product_name) を作成します。
# text 型のプロダクトタイトル (product_title) を作成し、アナライザを jieba に設定します。
# double 型の価格 (price) を指定します。

出力例:

OK

TFT.UPDATEINDEX

カテゴリ

説明

構文

TFT.UPDATEINDEX index mappings settings

コマンドの説明

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

パラメーター

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

  • mappings: マッピング内容。 新しく追加された properties フィールドのみを指定する必要があります (dynamic_source、およびその他の情報を入力する必要はありません)。 新しく追加された properties フィールドは、既存のフィールドと競合してはなりません。 そうしないと、追加は失敗します。

  • settings: インデックス設定を変更します。 queries_cachecompress_doc、および index パラメーターのみを変更できます。 index パラメーターについては、BM25 アルゴリズムの k1b の値のみを変更できます。

説明

mappings および settings の構文については、「TFT.CREATEINDEX」をご参照ください。

レスポンスパラメーター

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

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

コマンド例:

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

出力例:

OK

TFT.GETINDEX

カテゴリ

説明

構文

TFT.GETINDEX index

コマンドの説明

インデックスのマッピング内容を取得します。

パラメーター

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

レスポンスパラメーター。

  • 操作が成功すると、インデックスの 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 index document [WITH_ID doc_id]

コマンドの説明

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

パラメーター

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

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

    説明

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

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

レスポンスパラメーター

  • 操作が成功すると、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 index document doc_id [document1 doc_id1] ...

コマンドの説明

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

パラメーター

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

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

    説明

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

  • doc_id: ドキュメントの ID。 値は文字列である必要があります。

レスポンスパラメーター。

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

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

コマンド例:

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

出力例:

OK

TFT.UPDATEDOCFIELD

カテゴリ

説明

構文

TFT.UPDATEDOCFIELD index doc_id document

コマンドの説明

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

説明

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

オプション

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

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

  • document: 更新する JSON 形式のドキュメント内容。

    説明

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

レスポンスパラメーター。

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

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

コマンド例:

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

出力例:

OK

TFT.DELDOCFIELD

カテゴリ

説明

構文

TFT.DELDOCFIELD index doc_id field [field1 field2 ...]

コマンドの説明

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

説明

指定されたフィールドが存在しない場合 (たとえば、_source によって除外されたフィールド)、操作は失敗します。

オプション

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

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

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

レスポンスパラメーター。

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

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

コマンド例:

TFT.DELDOCFIELD idx:product 00011 product_group

出力例:

(integer) 1

TFT.INCRLONGDOCFIELD

カテゴリ

説明

構文

TFT.INCRLONGDOCFIELD index doc_id field increment

コマンドの説明

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

説明

ドキュメントが存在しない場合、ドキュメントは自動的に作成されます。 この場合、フィールドの既存の値は 0 であり、更新されたフィールド値は、既存のフィールド値に増分値を追加することによって取得されます。 フィールドが存在しない場合 (たとえば、_source によって除外された場合)、操作は失敗します。

オプション

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

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

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

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

レスポンスパラメーター。

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

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

コマンド例:

TFT.INCRLONGDOCFIELD idx:product 00011 stock 100

出力例:

(integer)100

TFT.INCRFLOATDOCFIELD

カテゴリ

説明

構文

TFT.INCRFLOATDOCFIELD index doc_id field increment

コマンドの説明

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

説明

ドキュメントが存在しない場合、ドキュメントは自動的に作成されます。 この場合、フィールドの既存の値は 0 であり、更新されたフィールド値は、既存のフィールド値に増分値を追加することによって取得されます。 フィールドが存在しない場合 (たとえば、_source によって除外された場合)、操作は失敗します。

オプション

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

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

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

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

レスポンスパラメーター。

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

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

コマンド例:

TFT.INCRFLOATDOCFIELD idx:product 00011 stock 299.6

出力例:

"299.6"

TFT.GETDOC

カテゴリ

説明

構文

TFT.GETDOC index doc_id

コマンドの説明

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

オプション

  • index: クエリするインデックスの名前。

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

レスポンスパラメーター。

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

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

コマンド例:

TFT.GETDOC idx:product 00011

出力例:

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

TFT.EXISTS

カテゴリ

説明

構文

TFT.EXISTS index doc_id

コマンドの説明

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

パラメーター

  • index: クエリするインデックスの名前。

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

レスポンスパラメーター。

  • 操作が成功した場合:

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

    • インデックスまたはドキュメントが存在しない場合、値 0 が返されます。

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

コマンド例:

TFT.EXISTS idx:product 00011

出力例:

(integer) 1

TFT.DOCNUM

カテゴリ

説明

構文

TFT.DOCNUM index

コマンドの説明

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

パラメーター

  • index: クエリするインデックスの名前。

戻り値

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

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

コマンド例:

TFT.DOCNUM idx:product

出力例:

(integer) 3

TFT.SCANDOCID

カテゴリ

説明

構文

TFT.SCANDOCID index cursor [MATCH *value*] [COUNT count]

コマンドの説明

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

パラメーター

  • index: クエリするインデックスの名前。

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

  • MATCH *value*: パターンマッチング。value は一致させる値です。たとえば、MATCH *redis* です。

  • COUNT count: この操作でスキャンするアイテムの最大数。デフォルトは 100 です。

レスポンスパラメーター。

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

    • 最初の要素: 次のクエリの cursor。 キーが完全にスキャンされた場合、0 が返されます。

    • 2 番目の要素: このクエリの doc_id。

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

コマンド例:

TFT.SCANDOCID idx:product 0 COUNT 3

出力例:

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

TFT.DELDOC

項目

説明

構文

TFT.DELDOC index doc_id [doc_id] ...

コマンドの説明

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

パラメーター

  • index: クエリするインデックスの名前。

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

レスポンスパラメーター。

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

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

コマンド例:

TFT.DELDOC idx:product 00011 00014

出力例:

"1"    # この例では、ID "00014" のドキュメントは存在しないため、ID "00011" のドキュメントのみが削除され、1 が返されます。

TFT.DELALL

カテゴリ

説明

構文

TFT.DELALL index

コマンドの説明

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

パラメーター

  • index: クエリするインデックスの名前。

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

レスポンスパラメーター。

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

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

コマンド例:

TFT.DELALL idx:product

出力例:

OK

TFT.ANALYZER

カテゴリ

説明

構文

TFT.ANALYZER analyzer_name text [INDEX index_name] [SHOW_TIME]

コマンドの説明

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

オプション

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

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

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

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

  • SHOW_TIME (オプション): ドキュメントをトークンに分割するのにかかった時間を返すかどうかを指定します。 単位: マイクロ秒 (us)。

    この時間には、辞書を読み込むのにかかった時間が含まれます。 JiebaAnalyzer や IKAnalyzer などの比較的大きな辞書が初めて読み込まれる場合、時間は数秒に増加することがあります。

レスポンスパラメーター。

  • 操作が成功すると、トークン情報が 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.SEARCH

カテゴリ

説明

構文

TFT.SEARCH index query

コマンドの説明

クエリ文に基づいてインデックス内のドキュメントを検索します。 クエリ構文は Elasticsearch 構文に似ています。

オプション

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

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

    • match: 基本的な一致検索。 次のパラメーターがサポートされています。

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

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

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

        • fuzziness を使用してあいまい検索が有効になっている場合、上記のパラメーターは無効です。 この場合、prefix_length を指定できます。

      • analyzer: match 文で使用されるトークナイザ。 有効値: standard (デフォルト、英語トークナイザ)、chinesearabiccjkczechbraziliangermangreekpersianfrenchdutchrussian、および 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: トークンクエリ。 このパラメーターを指定した場合、クエリ文は分割されません。 このクエリタイプは、match クエリよりも効率的です。 このパラメーターはすべてのフィールドタイプをサポートします。 トークンクエリを実行するときに、lowercase パラメーターを設定して、クエリするトークンを小文字に変換できます。 lowercase パラメーターの有効な値は true と false です。 デフォルト値は true です。 例: '{"query":{"term":{"f0":{"value":"redis","boost": 2.0}}}}' または '{"query":{"term":{"f0":{"value":"redis","lowercase": false}}}}'

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

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

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

    • range: 範囲クエリ。 このパラメーターはすべてのフィールドタイプをサポートします。 有効値: lt (より小さい)、gt (より大きい)、lte (以下)、および 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: クエリ結果は、must リスト内のすべてのクエリ句に一致する必要があります。 たとえば、'{"query":{"bool":{"must":[{"match":{"DB":"redis"}},{"match":{"Architectures":"cluster"}}]}}}' は、クエリするデータベースのタイプが Redis であり、データベースを含むインスタンスのアーキテクチャがクラスターであることを指定します。

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

      • should: 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.SEARCH idx:product '{"query":{"bool":{"must":[{"term":{"product_name":"apple"}},{"bool":{"minimum_should_match":1,"should":[{"term":{"price":19.5}},{"term":{"product_id":"fruits_2"}}]}}]}}}'

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

      tie_breaker パラメーターを指定すると、複数のクエリ句に一致するドキュメントのスコアが増加します。 tie_breaker の値は 0 から 1 の範囲で、デフォルト値は 0 です。 tie_breaker を指定すると、ドキュメントの最終スコアは次の数式を使用して計算されます: 最適一致句からのスコア + (他の一致するすべての句からのスコアの合計 × tie_breaker 値)。 たとえば、クエリに 3 つの句が含まれ、tie_breaker 値が 0.5 で、各句の doc1 という名前のドキュメントのスコアが 5、1、3 である場合、doc1 の最終スコアは 5 + ((1 + 3) × 0.5) です。

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

    • constant_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、および wildcard にブースト値を設定できます。 デフォルトのブースト値は 1 です。 クエリ構文でブースト値が適用されるパラメーターを指定する必要があります。 例: '{"query":{"bool":{"must":[{"match":{"f0":"v0"}},"term":{"f0":{"value":"redis","boost":2}}]}}}'

  • sort: ファクターによってクエリ結果をソートします。 ARRAY データ型はサポートされていません。 デフォルト値: _score。 有効値:

    • _score: クエリ結果を重みの降順でソートします。 例: "sort":"_score"

    • _doc: クエリ結果をドキュメント ID の昇順でソートします。 例: "sort":"_doc"

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

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

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

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

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

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

    • true: すべてのドキュメントがクエリされます。

      警告

      track_total_hits が true に設定され、クエリするドキュメントの数が多い場合、低速クエリが発生します。 注意して進めてください。

  • from: 返す開始ドキュメント。 デフォルト値は 0 で、最初のドキュメントとクエリされた後続のすべてのドキュメントを返すことを指定します。

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

    説明

    fromsize の組み合わせはページングのように機能します。 ただし、離散ページの数が増えるにつれてクエリのパフォーマンスは低下します。

出力

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

    説明

    次の出力例では、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] ... query

コマンドの説明

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

説明

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: このコマンドを実行して管理するインデックスの名前。 これらのインデックスは、mappingssettings が同じ値に設定されている必要があります。 mappings 構成がインデックスごとに異なる場合、またはインデックスが存在しない場合は、エラーが報告されます。

  • query: 集約文。 次のパラメーターがサポートされています。

    • query: クエリ句。

    • sort: ファクターによってクエリ結果をソートします。 ARRAY データ型はサポートされていません。

    • _source: 結果で返すフィールド。

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

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

    • size: 返すドキュメントの数。

      ページングクエリは、sizereply_with_keys_cursor、および keys_cursor を使用して実装できます。 keys_cursor がデフォルト値 0 に設定されている場合、Tair はインデックスから取得した結果の最初のドキュメントから指定された数のドキュメントを取得します。 keys_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。

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

説明

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

レスポンスパラメーター。

  • 操作が成功すると、取得したドキュメントと aux_info が返されます。これは TFT.SEARCH コマンドの出力に似ています。

    aux_info フィールドには、mappingssettings の CRC-64 値 (ビジネスリクエストでは無視できます)、keys_cursor 値 (オプション、各インデックスの次のクエリのカーソル位置を示す)、および field_type 値 (フィールドのデータの型、インデックスフィールドによるソート時にのみ返される) が含まれます。 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}}'
# クエリ文は最初のクエリと同じですが、前のクエリから返された keys_cursor 情報を追加する必要があります。

応答例:

{"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

コマンドの説明

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

オプション

  • index: クエリするインデックスの名前。

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

レスポンスパラメーター。

  • 操作が成功すると、出力は JSON 形式で返されます。 出力には次の項目が含まれる場合があります。

    • QUERY_COST: クエリの実行時間 (マイクロ秒単位) (time_cost_us)。 クエリビュー情報 (query) とクエリに関与するドキュメントの数 (doc_num) も含まれます。 bool クエリメソッドが使用されている場合、bool クエリプロセス (steps) の各ステップの実行時間が表示されます。

    • AGGS_COST: クエリプロセス中の集約に費やされた時間 (マイクロ秒単位) (time_cost_us)。 クエリ文に集約クエリが指定されていない場合、このコストは含まれません。

    • COLLECTOR_COST: クエリ結果の収集とソートに費やされた時間 (マイクロ秒単位) (time_cost_us)。 ソートタイプ (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 index query [doc_id] ...

コマンドの説明

クエリ文の実行から得られるドキュメントの詳細なスコア情報をクエリします。 このコマンドを使用して、ドキュメントのスコアがどのように計算されるかのプロセスについての洞察を得ることができます。 その後、検索クエリを最適化して、ドキュメント取得の有効性を高めることができます。

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

パラメーター

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

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

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

レスポンスパラメーター。

  • 操作が成功すると、クエリされたドキュメントの情報が返されます。 各ドキュメントの詳細なスコア情報 (_explanation) は、TFT.SEARCH コマンドによって返される基本結果セットへの追加です。 _explanation オブジェクトには次のフィールドが含まれます。

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

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

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

    • term: ドキュメント内で見つかったクエリからの 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 index text weight [text weight] ...

コマンドの説明

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

パラメーター

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

  • text: オートコンプリートテキストエントリ。

  • weight: 対応するテキストのスコアリングの重み。正の整数である必要があります。

レスポンスパラメーター

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

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

コマンド例:

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

出力例:

(integer) 2

TFT.DELSUG

カテゴリ

説明

構文

TFT.DELSUG index text [text] ...

コマンドの説明

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

パラメーター

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

  • text: インデックスから削除するテキストエントリ。 テキストエントリは完全かつ正確である必要があります。

出力

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

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

コマンド例:

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

出力例:

(integer) 2

TFT.SUGNUM

カテゴリ

説明

構文

TFT.SUGNUM index

コマンドの説明

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

パラメーター

  • index: クエリするインデックスの名前。

レスポンスパラメーター。

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

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

コマンド例:

TFT.SUGNUM idx:redis

出力例:

(integer) 3

TFT.GETSUG

カテゴリ

説明

構文

TFT.GETSUG index prefix [MAX_COUNT count] [FUZZY]

コマンドの説明

指定されたプレフィックスに基づいて一致させることができるオートコンプリートテキストを取得します。 テキストは重みの降順で返されます。

パラメーター

  • index: クエリするインデックスの名前。

  • prefix: 指定されたクエリプレフィックス。

  • MAX_COUNT count: 返すテキストエントリの最大数を構成します。count の値の範囲は [0,255] です。

  • FUZZY: あいまい検索を有効にするかどうか。

レスポンスパラメーター。

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

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

コマンド例:

TFT.GETSUG idx:redis res MAX_COUNT 2 FUZZY

出力例:

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

TFT.GETALLSUGS

カテゴリ

説明

構文

TFT.GETALLSUGS index

コマンドの説明

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

パラメーター

  • index: クエリするインデックスの名前。

レスポンスパラメーター。

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

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

サンプルコマンド:

TFT.GETALLSUGS idx:redis

出力例:

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

集約

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 など) に対して数値計算または統計を実行し、ネストされたサブ集約はサポートしません。 次のメトリックがサポートされています。

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

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

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

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

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

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

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

  • value_count: 重複排除なしで値の数をカウントし、数値型と キーワード 型の両方のフィールドをサポートします。

  • extended_stats: 上記のすべてのメトリックの計算を実行し、すべてのタイプの結果を一度に返します。

説明

value_count を除き、他のすべてのメトリックは数値型フィールドのみをサポートします。

出力: 特定のフィールドから計算された DOUBLE 型の値。

Terms 集約

重複排除された値の数をカウントします。 keyword 型のフィールドのみがサポートされています。 ネストされた集約がサポートされています。 パラメーターの説明:

  • terms

    • field: 集約フィールド。 keyword 型のフィールドのみがサポートされています。

    • size: 返す結果の数。 デフォルト値: 10。 有効値: [1,65536)。

    • order: 返されるオブジェクトのソート規則。 有効値:

      • _count (デフォルト): 結果の数でソートします。 有効値: desc (降順、デフォルト) および asc (昇順)。 例: "order":{"_count":"desc"}

      • _key: ターゲットフィールドの文字でソートします。 有効値: desc (降順) および asc (昇順)。 例: "order":{"_key":"desc"}

    • min_doc_count: ドキュメントの最小数。 デフォルト値: 1。 クエリ結果のドキュメント数がこの値より少ない場合、結果は表示されません。

    • include: 値に含めるか、一致させる必要がある文字列を指定します。 ターゲットフィールドが String 型の場合、正規表現マッチングがサポートされます。 ターゲットフィールドが配列の場合、文字列は完全に一致する必要があります。

    • exclude: 値に含めることも、一致させることもできない文字列を指定します。 ターゲットフィールドタイプの要件は、include の要件と同じです。 includeexclude の両方が存在する場合、最初に include がチェックされ、次に exclude がチェックされます。

例:

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

出力: 集約名をキーとし、Object をタイプとする JSON オブジェクト。 オブジェクトでは、キー集約はバケットを使用して統計を表示します。 各バケットには、キー (集約フィールド) と doc_count (集約フィールドに関連付けられたドキュメントの数) が含まれます。 例:

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

フィルター集約

filterquery 文を入力して、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"}}}}'
    # 今日の株式取引高を表すインデックスを作成します。
    # shares_name: 各株式の名前。
    # logictime: 取引が完了した時間。
    # purchase_type: 購入タイプ。
    # purchase_price: 購入価格。
    # purchase_count: 購入した株式の数。
    # investor: 投資家 ID。

    期待される出力:

    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

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