照会の集約

集約を使用して、照会要求によって返される結果をグループ化、分析、または比較します。

集約は、照会 API で指定できる aggregation パラメーターによって定義されます。 集約パラメーターへの入力は、同じ照会要求内で別個のパラメーターとして指定されている queryfilter、または natural_language_query パラメーターから返される文書セットです。 それ以外の場合、集約はプロジェクト内のすべての文書に適用されます。

集約を使用して、結果文書セット内の値から計算を行うことができます。 例えば、照会結果として返される文書の order.total フィールドの最高額に関する情報を取得するには、 aggregation パラメーターの値として max(order.total) を使用します。

集約タイプとしてmax、フィールド
のグループ化としてorder.totalを示す集約クエリ構造
*

aggregation パラメーターは、最も高い値を持つフィールドに関するデータを返します。

"aggregations": [
  {
    "type": "max",
    "field": "order.total",
    "value": 100668.00
  }
]

文書のグループ化

計算を行うほかに、集約を使用して、特定の値に一致する結果セット内の文書をグループ化することができます。これにより、それらの文書をカウントしたり、さらに分析したりすることができます。 例えば、集約を使用して、 brake という用語が言及されている文書を一連のトラフィック・インシデント・レポートで検索できます。 また、返された文書から、用語の最も関連性の高い言及を含む米国の州からのレポートを見つけます。

以下の要求例では、例を分かりやすくするために、3 つの集約結果のみを返す count パラメーターが含まれています。

{
    "query":"brake",
    "aggregation": "term(field:STATE,count:3,relevancy:true)"
}

集約パラメーターの出力は、照会結果を含む results オブジェクトの前に表示される aggregations オブジェクトで返されます。 1 回の照会で最大 50,000 個の値を aggregations オブジェクトに返すことができます。

結果の aggregations オブジェクトには、照会結果に関する要約情報が含まれます。 例えば、この例では、ニューヨーク、カリフォルニア、およびフロリダからの交通インシデント・レポートに、 brake という用語の最も関連性の高い言及があることを示しています。

{
  "matching_results": 9064,
  "retrieval_details": {
    "document_retrieval_strategy": "untrained"
  },
  "aggregations": [
    {
      "type": "term",
      "field": "STATE",
      "results": [
        {
          "key": "NY",
          "matching_results": 693,
          "relevancy": 1.1649531567631084,
          "total_matching_documents": 2156,
          "estimated_matching_results": 542
        },
        {
          "key": "CA",
          "matching_results": 1210,
          "relevancy": 1.1170819184294765,
          "total_matching_documents": 4017,
          "estimated_matching_results": 1011
        },
        {
          "key": "FL",
          "matching_results": 511,
          "relevancy": 0.828014956418841,
          "total_matching_documents": 2199,
          "estimated_matching_results": 553
        }
      ]
    }
  ],
  "results": []

集約タイプの結合

照会結果の分析またはグループ化に使用できる集約には、さまざまなタイプがあります。 また、複数の集約を 1 つの要求に結合して、よりターゲットを絞った分析を行うことができます。

以下の例は、2 つの term 演算子で構成される要求を示しています。 最初の用語集約では、入力文書が US STATE 値によってグループ化され、3 つのグループが選択されます。 2 番目の用語の集約は、これらの 3 つのグループのそれぞれに適用され、CITY の値によってさらにグループ化されます。 STATE グループごとに、これらの CITY サブグループのうち 2 つのみが返されます。

関連性パラメーターは、結果を読みやすくするために除外されています。

{
    "query":"brake",
    "aggregation": "term(field:STATE,count:3).term(field:CITY,count:2)"
}

応答には、各都道府県からの市区町村情報が含まれます。

{
  "matching_results": 9064,
  "retrieval_details": {
    "document_retrieval_strategy": "untrained"
  },
  "aggregations": [
    {
      "type": "term",
      "field": "STATE",
      "count": 3,
      "results": [
        {
          "key": "CA",
          "matching_results": 1210,
          "aggregations": [
            {
              "type": "term",
              "field": "CITY",
              "count": 2,
              "results": [
                {
                  "key": "LOS ANGELES",
                  "matching_results": 77
                },
                {
                  "key": "SAN DIEGO",
                  "matching_results": 66
                }
              ]
            }
          ]
        },
        {
          "key": "NY",
          "matching_results": 693,
          "aggregations": [
            {
              "type": "term",
              "field": "CITY",
              "count": 2,
              "results": [
                {
                  "key": "BROOKLYN",
                  "matching_results": 35
                },
                {
                  "key": "NEW YORK",
                  "matching_results": 21
                }
              ]
            }
          ]
        },
        {
          "key": "FL",
          "matching_results": 511,
          "aggregations": [
            {
              "type": "term",
              "field": "CITY",
              "count": 2,
              "results": [
                {
                  "key": "JACKSONVILLE",
                  "matching_results": 33
                },
                {
                  "key": "TAMPA",
                  "matching_results": 29
                }
              ]
            }
          ]
        }
      ]
    }
  ],
  "results": []

集約を指定する順序が重要になります。 例えば、用語の集約の順序を前の例と逆にすると、異なる結果が得られます。

{
    "query":"brake",
    "aggregation": "term(field:CITY,count:3).term(field:STATE,count:1)"
}

新しい注文により、以前の結果セットに含まれていなかった市区町村であるシカゴを表面化させる結果が生成されます。 要求が州ごとにグループ化されて開始されると、交通インシデント・レポートの数が多い市区町村が 1 つしかないイリノイ州は、結果に含まれません。 多くのインシデント・レポートを持つ複数の都市を持つニューヨークとフロリダは、より多くの州全体の一致を生成するため、返されました。 最初に市区町村ごとにグループ化すると、結果が変わります。

{
  "matching_results": 9064,
  "retrieval_details": {
    "document_retrieval_strategy": "untrained"
  },
  "aggregations": [
    {
      "type": "term",
      "field": "CITY",
      "count": 4,
      "results": [
        {
          "key": "LOS ANGELES",
          "matching_results": 77,
          "aggregations": [
            {
              "type": "term",
              "field": "STATE",
              "count": 1,
              "results": [
                {
                  "key": "CA",
                  "matching_results": 77
                }
              ]
            }
          ]
        },
        {
          "key": "SAN DIEGO",
          "matching_results": 66,
          "aggregations": [
            {
              "type": "term",
              "field": "STATE",
              "count": 1,
              "results": [
                {
                  "key": "CA",
                  "matching_results": 66
                }
              ]
            }
          ]
        },
        {
          "key": "CHICAGO",
          "matching_results": 59,
          "aggregations": [
            {
              "type": "term",
              "field": "STATE",
              "count": 1,
              "results": [
                {
                  "key": "IL",
                  "matching_results": 59
                }
              ]
            }
          ]
        }
      ]
    }
    ],
    "results": []

集約を使用したエンリッチメントの探索

term() 集約は、文書内で認識されているエンリッチメントの数を調べるために結果を分析する場合に特に役立ちます。 例えば、フィルターに掛けられた文書で各エンティティー・タイプが認識された回数をカウントするには、以下の照会パラメーターをサブミットできます。

{
  "filter": "enriched_text.entities:(text::Gilroy,type::Location)",
  "aggregation": "term(enriched_text.entities.type)"
}

照会はまず、タイプ Location のエンティティーを少なくとも 1 つ持ち、テキストが Gilroy である文書を選択します。 このアクションは、3 つの文書を返します。 返された文書から、集約は、各エンティティー・タイプが出現する文書の数をカウントします。

{
  "matching_results": 3,
  "retrieval_details": {
    "document_retrieval_strategy": "untrained"
  },
  "aggregations": [
    {
      "type": "term",
      "field": "enriched_text.entities.type",
      "results": [
        {
          "key": "Location",
          "matching_results": 3
        },
        {
          "key": "Person",
          "matching_results": 3
        },
        {
          "key": "Company",
          "matching_results": 2
        },
        {
          "key": "GeographicFeature",
          "matching_results": 2
        },
        {
          "key": "Organization",
          "matching_results": 2
        },
        {
          "key": "Quantity",
          "matching_results": 2
        },
        {
          "key": "Facility",
          "matching_results": 1
        },
        {
          "key": "PrintMedia",
          "matching_results": 1
        }
      ]
    }
  ]
}

一致する 3 つの文書はすべて、 Location エンティティー・タイプと Person エンティティー・タイプ ("matching_results": 3) を持ちます。 ただし、 Company エンティティー・タイプを持つのは、一致する文書のうち 2 つのみです。

デフォルトでは、関連性でソートされた上位 10 件の一致が返されます。 集約に count パラメーターを追加することで、結果の数を変更できます。

{
  "filter": "enriched_text.entities:(text::Gilroy,type::Location)",
  "aggregation": "term(enriched_text.entities.type,count:20)"
}

フィルターの追加

集約節で filter() を使用して、結果をフィルタリングします。 例えば、前の例で別個にサブミットされた同じフィルターを aggregation 節で直接指定することができます。

{
  "aggregation": "filter(enriched_text.entities:(text::Gilroy,type::Location)).term(enriched_text.entities.type)"
}

この場合、 filter().term() 集約は、個別の filter 節と aggregation 節を使用して、前の例と同じ結果を検出します。 ただし、 filter 節を使用すると、結果のランクが異なります。 この違いを利用するには、次の例に示すように、 aggregation 節内で filter() 節を使用して、一連の式からの結果をフィルターに掛けます。

ネストされたオブジェクトで開始

前の例では、 "matching_counts" 値は、フィルターと集約に一致する文書の数を表します。 照会応答に存在する ネストされた オブジェクトの数をカウントすることができます。 nested() 集約を使用すると、他の集約用語への入力として使用される文書のセットを変更できます。

例えば、以下の照会では、 nested() セグメントは、 filter() セグメントと term() セグメントによって使用される入力として、すべての enriched_text.entities ネスト・オブジェクトを選択します。

{
  "aggregation": "nested(enriched_text.entities).filter(enriched_text.entities.type::Organization).term(enriched_text.entities.text,count:3)"
}

照会結果は、以下のような aggregations オブジェクトになります。

{
  "aggregations": [
    {
      "type": "nested",
      "path": "enriched_text.entities",
      "matching_results": 1993,
      "aggregations": [
        {
          "type": "filter",
          "match": "enriched_text.entities.type::Organization",
          "matching_results": 645,
          "aggregations": [
            {
              "type": "term",
              "field": "enriched_text.entities.text",
              "count": 3,
              "results": [
                {
                  "key": "IBM",
                  "matching_results": 36
                },
                {
                  "key": "Docker",
                  "matching_results": 12
                },
                {
                  "key": "OpenShift",
                  "matching_results": 12
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

照会の nested() セグメントで、1993 enriched_text.entities 個のネストされたオブジェクトが検出されました。 フィルターがそれらのオブジェクトに適用され、タイプ Organization の 645 enriched_text.entities が検出されました。

端末操作

ほとんどの集約タイプでは、複数の集約操作を使用して照会を構成すると、最初の操作が文書に適用されます。 次に、その操作の出力が次の操作の入力として使用されます。 ただし、集約タイプのサブセットは 端末操作です。 端末操作の出力は、次の集約の入力として使用されません。 代わりに、出力は離散グループに戻されます。

集約タイプを結合し、端末操作を実行する集約を含む要求の例については、 average 集約タイプの 2 番目の を参照してください。

集計タイプ

以下の集計タイプがサポートされています

文書検索プロジェクト・タイプの場合、照会要求に集約パラメーターを含めないと、デフォルトの集約要求が適用されます。 詳しくは、 Document Retrieval project aggregations を参照してください。

照会を送信する方法について詳しくは、 Discovery API リファレンスを参照してください。

平均

一致するすべての文書において、指定されたフィールドの平均値を返します。

構文

average(field)

サンプル価格
プロダクト 価格
I シリーズ 200
J シリーズ することが
X シリーズ 325

average 集約タイプが、表 1 に示す値が price フィールドに含まれている文書セットに適用されると、結果は 325 になります。

average(price)=325

この集約タイプは、端末操作を実行します。 他の集約と組み合わせると、出力は次の集約の入力として使用されません。 出力は離散グループに戻されます。

{
    "query":"brake",
    "aggregation": "term(field:STATE,count:3).average(field:VEH_SPEED).term(field:CITY,count:2)"
}

最初の term 集約操作によって返された状態ごとに、インシデント・レポートで指定された平均車両速度が応答に表示されます。 2 番目の term 集約は、 average 集約ではなく、最初の term 集約からの出力を入力として使用することに注意してください。

{
  "matching_results": 9064,
  "retrieval_details": {
    "document_retrieval_strategy": "untrained"
  },
  "aggregations": [
    {
      "type": "term",
      "field": "STATE",
      "count": 3,
      "results": [
        {
          "key": "CA",
          "matching_results": 1210,
          "aggregations": [
            {
              "type": "average",
              "field": "VEH_SPEED",
              "value": 26.239653512993264
            },
            {
              "type": "term",
              "field": "CITY",
              "count": 2,
              "results": [
                {
                  "key": "LOS ANGELES",
                  "matching_results": 77
                },
                {
                  "key": "SAN DIEGO",
                  "matching_results": 66
                }
              ]
            }
          ]
        }

フィルター

その直前に実行された集約クエリのドキュメントセットを絞り込む修飾子。

構文

filter(field)

以下の例では、 IBM に言及する文書のみが含まれるように、一致する文書セットをフィルタリングします。

filter(enriched_text.entities.text:IBM)

他の集約と組み合わせると、指定した条件を満たす文書のみが含まれるように、一致する文書セットがフィルタリングされます。

{
    "query":"brake",
    "aggregation": "filter(VEH_SPEED>50).term(field:STATE,count:3).term(field:CITY,count:2)"
}

照会応答には、ブレーキに関連するインシデントが発生し、車両速度が 50 を超える都市が示されます。

{
  "matching_results": 9064,
  "retrieval_details": {
    "document_retrieval_strategy": "untrained"
  },
  "aggregations": [
    {
      "type": "filter",
      "match": "VEH_SPEED>50",
      "matching_results": 1075,
      "aggregations": [
        {
          "type": "term",
          "field": "STATE",
          "count": 3,
          "results": [
            {
              "key": "CA",
              "matching_results": 176,
              "aggregations": [
                {
                  "type": "term",
                  "field": "CITY",
                  "count": 2,
                  "results": [
                    {
                      "key": "FONTANA",
                      "matching_results": 6
                    },
                    {
                      "key": "ALTA LOMA",
                      "matching_results": 5
                    }
                  ]
                }
              ]
            }

group_by

結果を、ユーザーが定義するグループに分割します。

構文

group_by(condition:[(condition 1),(condition 2)...])

各条件は、括弧で囲まれた有効なディスカバリー照会言語式として指定する必要があります。 例えば、 (age<20) または (flavor:chocolate) などです。 定義できる条件の最大数は 50 個です。

オプションで、 relevancy パラメーターを組み込み、それを true に設定して、指定された条件を満たす文書セットの関連性の値を返すことができます。 true の場合、結果は関連性でソートされます。 false の場合、結果は matching_results の最大数でソートされます。

以下の要求は、 engine という用語が言及されている文書を検索し、自動車製造年ごとにグループ化します。 文書は、2000 年以前に製造された車両に関する交通事故報告書の 1 グループ、2000 年に製造された車両に関する報告書の 1 グループ、2000 年以降に製造された車両に関する報告書の 1 グループの 3 グループに分類される。

{
    "query":"engine",
    "aggregation": "group_by(condition:[(YEARTXT<2000),(YEARTXT=2000),(YEARTXT>2000)],relevancy:true)"
}

結果は次のようになります。

{
  "type": "group_by",
  "results": [
    {
    "key": "YEARTXT<2000",
      "matching_results": 2034,
      "relevancy": 1.0,
      "total_matching_documents": 2034,
      "estimated_matching_results": 2034
    },
    {
      "key": "YEARTXT=2000",
      "matching_results": 1738,
      "relevancy": 1.0,
      "total_matching_documents": 1738,
      "estimated_matching_results": 1738
    },
    {
      "key": "YEARTXT>2000",
      "matching_results": 32708,
      "relevancy": 1.0,
      "total_matching_documents": 32708,
      "estimated_matching_results": 32708
    }
  ]
}

ヒストグラム

文書を分類するための数値区間セグメントを作成します。

構文

histogram({field},{interval})

単一の数値フィールドのフィールド値を使用して、カテゴリーを記述します。 ヒストグラムの作成に使用するフィールドは、数値データ型 ( integerfloatdoubledate など) でなければなりません。

string のような数値以外の型はサポートされていません。 例えば、 "price": 1.30 は数値なので機能しますが、 "price": "1.30" は文字列なので機能しません。

interval 引数を使用して、分割される結果のセクションのサイズを定義します。 間隔値は、負でない整数でなければなりません。 フィールドの標準的な値をセグメント化するために意味のある値を選択してください。

ヒストグラムは、フィールドに指定された 10 進値を処理できますが、間隔は整数でなければなりません。

オプションで、 name パラメーターを含めることにより、カスタム名を含めることができます。

例えば、データセットに “price”: 1.30“price”: 1.99“price”: 2.99 といった複数のアイテムの価格が含まれている場合、 1 という範囲を使用すると、 1 - 223 という範囲にグループ化されたすべてのアイテムが表示されます。 すべてのデータが同じセグメントになるため、 100 の間隔を使用する必要はありません。

histogram(product_price,interval:1)

max

一致するすべての文書において、指定されたフィールドの最高値を返します。

構文

max(field)

サンプル価格
プロダクト 価格
I シリーズ 200
J シリーズ することが
X シリーズ 325

max 集約タイプが、表 2 に示す値が price フィールドに含まれている一連の文書に適用されると、結果は 450 になります。

max(price)=450

この集約タイプは、端末操作を実行します。 他の集約と組み合わせると、出力は次の集約の入力として使用されません。 出力は離散グループに戻されます。

min

一致するすべての文書において、指定されたフィールドの最低値を返します。

構文

min(field)

サンプル価格
プロダクト 価格
I シリーズ 200
J シリーズ することが
X シリーズ 325

min 集約タイプが、表 3 に示されている値が price フィールドに含まれている文書セットに適用されると、結果は 200 になります。

min(price)=200

この集約タイプは、端末操作を実行します。 他の集約と組み合わせると、出力は次の集約の入力として使用されません。 出力は離散グループに戻されます。

ネストされた

集約クエリを実行する前に nested を適用すると、集約結果が指定した範囲に限定されます。

例えば、 nested(enriched_text.entities) は、任意の結果の enriched_text.entities コンポーネントのみが集約に使用されることを意味します。

以下の例では、モデル・タイプごとに返されるメンションの数を確認します。

nested(enriched_text.entities).term(enriched_text.entities.model_name)

この結果は、合計 50 個の認識されたエンティティーがあり、それらすべてのタイプが NLU であることを示しています。

"aggregations": [
  {
    "type": "nested",
    "path": "enriched_text.entities",
    "matching_results": 50,
    "aggregations": [
      {
        "type": "term",
        "field": "enriched_text.entities.model_name",
        "results": [
          {
            "key": "natural_language_understanding",
            "matching_results": 50
          }
        ]
      }
    ]
  }
]

別の例については、 ネストされたオブジェクトでの開始 を参照してください。

2 つのフィールド間の関係を分析します。

構文

pair(first:{aggregation},second:{aggregation})

最初と 2 番目の {aggregation} 値は、以下の集約タイプのいずれかでなければなりません。

  • term
  • group_by
  • histogram
  • timeslice

term または group_by 集約の relevancy パラメーターは無視されます。 pair 集約タイプは、2 つの集約の結果から文書セットの組み合わせを使用して関連性の値を計算します。

照会要求ごとに使用できるペア集約は 1 つのみであり、他の集約と組み合わせることはできません。

例えば、最初の集約として term(model_name) を指定し、2 番目の集約として term(component_name) を指定することができます。 各集約は、集約された文書セットのキーとして以下の値を返します。

  • term (model_name): アコード、CR-V
  • term (component_name): エンジン、ブレーキ、ラジエーター

各文書セットの組み合わせの計算された関連性の値は、以下のようになります。

  • アコード x エンジン
  • アコード x ブレーキ
  • アコード X ラジエーター
  • CR-V x エンジン
  • CR-V x ブレーキ
  • CR-V x ラジエーター

応答は、集計結果の 2 次元配列を定義します。これは表で表すことができます。

ペア集約の例
このテーブルには行と列のヘッダーがある。 行ヘッダーは、車のモデルを識別します。 列ヘッダーは、自動車部品を識別します。 各セルは、車のモデル (行) 関連性の値に車のコンポーネント (ヘッダー) 関連性の値を乗算して、関連性スコアを計算します。
車のモデル コンポーネント: エンジン コンポーネント: ブレーキ コンポーネント: ラジエーター
アコード アコード x エンジン アコード x ブレーキ アコード X ラジエーター
CRV CR-V x エンジン CR-V x ブレーキ CR-V x ラジエーター

表の列と行の各配列は、1 番目と 2 番目の集約の結果と同じ順序でソートされます。 例えば、最初の引数として term 集約を指定すると、結果の列配列は項の頻度でソートされます。 2 番目の引数として timeslice 集約を使用する場合、行配列は日付または時刻でソートされます。

合計

一致するすべてのドキュメントについて、指定したフィールドの値を追加します。

構文

sum(field)

サンプル価格
プロダクト 価格
I シリーズ 200
J シリーズ することが
X シリーズ 325

表 6 に示されている値が price フィールドに含まれている文書セットに sum 集約タイプが適用されると、結果は 975 になります。

sum(price)=975

この集約タイプは、端末操作を実行します。 他の集約と組み合わせると、出力は次の集約の入力として使用されません。 出力は離散グループに戻されます。

契約期間

照会された文書セット内の用語または用語セットの頻度を示します。

構文

term(field:{field_name})

オプションで以下のパラメータを指定できます

  • count: 返す用語の最大数を指定します。

  • name: オプションでカスタム名を含めることができます。 関連性情報が要求に含まれている場合は返されません。

  • relevancy: 結果に関連性情報を含めるかどうかを示すブール値。 関連性を使用して、照会内の用語とキーワードの間の関連性のレベルを示すスコアを取得できます。 このパラメータは、デフォルトで false です。 true に設定すると、以下のフィールドも返されます。

    • total_matching_documents: 指定されたフィールドで用語が言及されているコレクション内の文書の数。
    • estimated_matching_results: 照会によって返される文書セット内の指定されたフィールドに用語が含まれると推定される文書の数。

以下の例では、文書内の認識されたエンティティーからテキストを返し、最大 10 個の用語を返すように指定します。

例:

term(enriched_text.entities.text,count:10)

relevancytrue に設定されている場合、関連性スコアが結果に表示されます。 関連性は、照会に一致する他の文書と比較した頻度カウントの固有性のレベルを測定します。 関連性が 2.0を示している場合は、2 つのデータ・ポイントが交差する回数が予想の 2 倍であることを意味します。

その他の例については、 文書のグループ化 および 集約タイプの組み合わせ を参照してください。

タイム・スライス

日付を使用して区間セグメントを作成する特殊なヒストグラム。

構文

構文は timeslice({field},{interval},{time_zone}) です。

  • 指定するフィールドは、 date データ・タイプでなければなりません。 日付フィールドについて詳しくは、 日付の処理方法 を参照してください。
  • 有効な間隔値は、 1second または {n}seconds1minute または {n}minutes1hour または {n}hours1day または {n}days1week または {n}weeks1month または {n}months、および 1year または {n}years ( {n} は数値) です。
  • オプションで、 name パラメーターを含めることにより、カスタム名を含めることができます。

以下の例は、各日の値の一致数を示しています。

timeslice(field:DATEA,interval:1day)

結果は以下の通りです。

"aggregations": [
  {
    "type": "timeslice",
    "field": "DATEA",
    "interval": "1d",
    "results": [
        {
    "key": 1262304000000,
    "key_as_string": "2010-01-01T00:00:00.000Z",
    "matching_results": 5
        },
        {
    "key": 1262390400000,
    "key_as_string": "2010-01-02T00:00:00.000Z",
    "matching_results": 18
        },
        {
    "key": 1262476800000,
    "key_as_string": "2010-01-03T00:00:00.000Z",
    "matching_results": 38
        },
        {
    "key": 1262563200000,
    "key_as_string": "2010-01-04T00:00:00.000Z",
    "matching_results": 66
        }

top_hits

照会またはエンリッチメントのスコアによってランク付けされた文書を返します。 どの照会パラメーターまたは集約でも使用できます。

構文

{aggregation}.top_hits({n})

以下の例では、都市ごとに halt という用語の上位ヒットが返されます。

{
  "query":"halt",
  "aggregation": "term(CITY).top_hits(1)"
}

応答には、用語 halt の上位の照会結果が含まれています。これは、その用語が最も言及されている文書内で言及されている都市によってグループ化されています。 デフォルトでは、10 件の結果が返されます。 10 都市のそれぞれについて、トップ・スコアを持つ文書が hit オブジェクトとして返されます。 hits 配列内の各 hit の内容は、 results 配列内の各 result の内容と一致します。 結果の順序のみが異なります。

"aggregations": [
  {
    "type": "term",
    "field": "CITY",
    "results": [
      {
        "key": "LOS ALTOS",
        "matching_results": 3,
        "aggregations": [
          {
            "type": "top_hits",
            "size": 1,
            "hits": {
              "matching_results": 3,
              "hits": [
                {
                  "document_id": "2bed19a9069442fd82542827ebe260d5_7015",
                  ...
                }
              ]
            }
          }
        ]
      },
      {
        "key": "ANDOVER",
        "matching_results": 2,
        "aggregations": [
          {
            "type": "top_hits",
            "size": 1,
            "hits": {
              "matching_results": 2,
              "hits": [
                {
                  "document_id": "2bed19a9069442fd82542827ebe260d5_18329",
                  ...
                }
              ]
            }
          }
        ]
      },
      ...
      {
        "key":"ACTON",
        "maatching_results": 1,
        "aggregations": []
      }
      ...

この集約タイプは、端末操作を実行します。 他の集約と組み合わせると、出力は次の集約の入力として使用されません。 出力は離散グループに戻されます。

傾向

キーワード値の過去の頻度変更に基づいて、指定された期間におけるキーワード値の頻度の急激な変更および予期しない変更を検出します。

シトナックス

trend(facet:{aggregation},time_segments:{aggregation})

最初の (facet) 集約は、以下のいずれかのタイプの集約でなければなりません。

  • term
  • group_by

term または group_by 集約の relevancy パラメーターは無視されます。

2 番目の (time_segments) 集約は、タイプ timeslice の集約でなければなりません。

代わりに、以下のパラメーターを含めることもできます。

  • show_estimated_matching_results:true: estimated_matching_results 情報を結果に含めるかどうかを示します。 このフィールドには、指定されたフィールドに用語があると推定される文書の数、または照会によって返される文書セット内の指定された時間間隔で指定された集約の条件を満たすと推定される文書の数が含まれます。
  • show_total_matching_documents:true: total_matching_documents 情報を結果に含めるかどうかを示します。 このフィールドには、指定されたフィールドで用語が言及されているか、条件が満たされているコレクション内の文書の数が含まれます。

照会要求ごとに使用できるトレンド集計は 1 つのみであり、他の集計と組み合わせることはできません。

以下の例では、以下の集約の結果の組み合わせを使用して、 トレンド・インディケーター または トレンド・インデックス を計算します。

  • 用語 (風味): バニラ、チョコレート、ミント
  • timeslice (date, 1month): 2020 年 1 月、2020 年 2 月、2020 年 3 月、2020 年 4 月、2020 年 5 月、2020 年 6 月
trend( facet: aggregation(<parameter>...), time_segments: timeslice(<parameter>...)),
show_estimated_matching_results: <true_or_false>, show_total_matching_documents: <true_or_false> )

結果のマトリックスは、表で表すことができます。

トレンド集計例
このテーブルには行と列のヘッダーがある。 行ヘッダーは、2020 年の月を示します。 列ヘッダーは、アイスクリームのフレーバーを識別します。 各セルは、月 (行) 関連性値にフレーバー (ヘッダー) 関連性値を乗算して、関連性スコアを計算します。
2020 年の月 風味: バニラ フレーバー: チョコレート フレーバー: ミント
1 月 バニラ x 1 月 チョコレート x 1 月 ミント x 1 月
2 月 バニラ X 2 月 チョコレート x 2 月 ミント x 2 月
3 月 バニラ x マール チョコレート x マー 最小値 x 最大値
4 月 バニラ X Apr チョコレート x Apr 最小値 x 4 月
5 月 バニラ x メイ チョコレート x メイ ミント x 5 月
6 月 バニラ・ X ・ジュン チョコレート x Jun ミント x ジュン

以下のサンプル応答では、鍵情報は trend_indicator 値です。 トレンド・インディケーターは、所定の時間間隔における所定のファセット値の頻度の、予想される平均頻度と比較した増加率を測定します。 除外される平均頻度は、加重算術平均を使用して、指定されたファセット値の過去の時間間隔頻度の変化に基づいて計算されます。

標準化残差値が-2より小さい場合、観測された頻度は期待された頻度より小さい。 2 より大きい場合、観測度数は期待度数より大きくなります。 標準化された残差が予想される頻度より 3 回以上多いか少ない場合は、何か異常が発生しており、調査する価値のある異常が存在する可能性があることを示唆しています。

例えば、5 月に vanilla フレーバーで予期されるフィードバック送信の数は、前に受信したフィードバック送信の数 (1 月から 4 月まで) から計算されます。 結果は 5.341 です。 5 月のフィードバック送信の実際の数は 10 です。 この結果は、バニラ・フレーバーが期待されるフィードバック送信数の約 2 倍になったことを示しています。 標準化された残差の値は 2.016 です。これは予想より大きい値ですが、異常に大きい値ではありません。

{
"aggregations": [
  {
    "type": "trend",
    "facet": "term(flavor),",
    "time_segments": "timeslice(date, 1month)",
    "show_estimated_matching_results": true,
    "show_total_matching_documents": true,
    "results": [
      {
        "aggregations": [
          {
            "type": "term",
            "field": "flavor",
            "results": [
              {
                "key": "vanilla",
                "matching_results": 36,
                "aggregations": [
                  {
                    "type": "timeslice",
                    "field": "date",
                    "results": [
                      {
                        "key": 1577836800000,
                        "key_as_string": "2020-01-01T00:00:00.000Z",
                        "matching_results": 4,
                        "trend_indicator": 0.0,
                        "total_matching_documents": 7,
                        "estimated_matching_results": 0.0
                      },
                      {
                        "key": 1588291200000,
                        "key_as_string": "2020-05-01T00:00:00.000Z",
                        "matching_results": 10,
                        "trend_indicator": 2.016106745,
                        "total_matching_documents": 12,
                        "estimated_matching_results": 5.340760209
                      },
                      {
                        "key": 1590969600000,
                        "key_as_string": "2020-06-01T00:00:00.000Z",
                        "matching_results": 5,
                        "trend_indicator": -0.763212711,
                        "total_matching_documents": 11,
                        "estimated_matching_results": 7.022515985
                      }
                    ]
                  }
                ]
              },
              {
                "key": "chocolate",
                "matching_results": 10,
                "aggregations": [...]
              },
              {
                "key": "mint",
                "matching_results": 25,
                "aggregations": [...]
...
}  

トピック

キーワード値の頻度が、指定された期間の予期される平均からどの程度逸脱しているかを検出します。 この集約タイプでは、前の期間のデータは使用されません。 指定された期間の他のキーワード値の頻度カウントの平均を使用して、索引を計算します。

構文

topic(facet:{aggregation},time_segments:{aggregation})

最初の (facet) 集約は、以下のいずれかのタイプの集約でなければなりません。

  • term
  • group_by

term または group_by 集約の relevancy パラメーターは無視されます。

2 番目の (time_segments) 集約は、タイプ timeslice の集約でなければなりません。

代わりに、以下のパラメーターを含めることもできます。

  • show_estimated_matching_results:true: estimated_matching_results 情報を結果に含めるかどうかを示します。 このフィールドには、指定されたフィールドに用語があると推定される文書の数、または照会によって返される文書セット内の指定された時間間隔で指定された集約の条件を満たすと推定される文書の数が含まれます。
  • show_total_matching_documents:true: total_matching_documents 情報を結果に含めるかどうかを示します。 このフィールドには、指定されたフィールドで用語が言及されているか、条件が満たされているコレクション内の文書の数が含まれます。

照会要求ごとに使用できるトピック集約は 1 つのみであり、他の集約と組み合わせることはできません。

{
    "query: like",
    "aggregation": "topic( facet: term(flavor), time_segments: timeslice(date, 1month), show_estimated_matching_results: true, show_total_matching_documents: true )"
}

集約の例で使用されているものと同じデータ・セットと集約を使用すると、結果は以下のようになります。

topic_indicator 値は、 trend 集約によって返される trend_indicator 値とは異なることに注意してください。 両方とも実際の度数と期待される度数から計算されますが、期待される度数は異なる方法で計算されるため、異なります。 trend 集計では、5 月のバニラ・フレーバー・アイスクリームのフィードバック送信の予想頻度は、以前にバニラ (1 月から 4 月まで) で受信したフィードバック送信の数と、5 月にすべてのフレーバーで受信したフィードバック送信の総数から計算されます。 ただし、 topic 集約では、5 月のバニラ・フレーバー・アイスクリームのフィードバック送信の予想頻度は、バニラについて受信されたフィードバック送信の数と、5 月のすべてのフレーバーについて受信されたフィードバック送信の総数から計算されます。 この例では、期待される頻度の結果は 12.169、実際の頻度は 10topic_indicator-0.621777032 です。

{
"aggregations": [
  {
    "type": "topic",
    "facet": "term(flavor)",
    "time_segments": "timeslice(date, 1month)",
    "show_estimated_matching_results": true,
    "show_total_matching_documents": true,
    "results": [
      {
        "aggregations": [
          {
            "type": "term",
            "field": "flavor",
            "results": [
              {
                "key": "vanilla",
                "matching_results": 36,
                "aggregations": [
                  {
                    "type": "timeslice",
                    "field": "date",
                    "results": [
                      {
                        "key": 1577836800000,
                        "key_as_string": "2020-01-01T00:00:00.000Z",
                        "matching_results": 4,
                        "topic_indicator": -0.027972712,
                        "total_matching_documents": 7,
                        "estimated_matching_results": 4.056338028
                      },
                      {
                        "key": 1588291200000,
                        "key_as_string": "2020-05-01T00:00:00.000Z",
                        "matching_results": 10,
                        "topic_indicator": -0.621777032,
                        "total_matching_documents": 12,
                        "estimated_matching_results": 12.16901408
                      },
                      {
                        "key": 1590969600000,
                        "key_as_string": "2020-06-01T00:00:00.000Z",
                        "matching_results": 5,
                        "topic_indicator": -0.787665504,
                        "total_matching_documents": 11,
                        "estimated_matching_results": 7.098591549
                      }
                    ]
                  }
                ]
              },
              {
                "key": "chocolate",
                ...
              },
              {
                "key": "mint",
                ...
              }
}

unique_count

コレクション内の指定されたフィールドの固有インスタンスのカウントを返します。

構文

unique_count(field)

以下の集約は、照会で認識される固有のエンリッチ・タイプの数を要求します。

unique_count(enriched_text.keyword.type)

結果は、17 件の一致する結果があることを示しています。 これらの 17 個の文書では、14 個のエンティティー・タイプが言及されています。

{
  "matching_results": 17,
  "retrieval_details": {
    "document_retrieval_strategy": "untrained"
  },
  "aggregations": [
    {
      "type": "unique_count",
      "field": "enriched_text.entities.type",
      "value": 14.0
    }
  ],
  "results": []
}

この集約タイプは、端末操作を実行します。 他の集約と組み合わせると、出力は次の集約の入力として使用されません。 出力は離散グループに戻されます。

以下の例では、集約パラメーターは、最も頻繁に言及される最初の 45 個のエンティティーを表示するように結果を要求します。 エンティティーごとに、その用語に言及している文書の数と、その用語が出現する合計回数を示します。

term(enriched_text.entities.text,count:45).unique_count(enriched_text.entities.type)

結果には、 PostgreSQL という用語の以下のグループなど、いくつかの集約が含まれます。 この集約は、用語が 4 つの文書に出現し、12 回言及されていることを示します。

{
  "key": "PostgreSQL",
  "matching_results": 4,
  "aggregations": [
    {
      "type": "unique_count",
      "field": "enriched_text.entities.type",
      "value": 12.0
    }
  ]
}