查詢聚集

使用聚集來分組、分析或比較查詢要求所傳回的結果。

聚集由您可以在查詢 API 中指定的 aggregation 參數定義。 聚集參數的輸入是從指定為相同查詢要求中個別參數的 queryfilternatural_language_query 參數傳回的文件集。 否則,聚集會套用至專案中的所有文件。

您可以使用聚集,從結果文件集中的值執行計算。 例如,若要取得作為查詢結果傳回之文件的 order.total 欄位中最高金額的相關資訊,請使用 max(order.total) 作為 aggregation 參數的值。

聚合查詢結構範例,顯示 max 作為聚合類型,order.total作為欄位詳細資訊的分組
聚合查詢結構範例

聚集參數會傳回具有最高值之欄位的相關資料。

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

將文件分組

除了執行計算之外,您還可以使用聚集來對結果集中符合特定值的文件進行分組,以便可以對它們進行計數或進一步分析。 例如,您可以使用聚集來搜尋一組交通事故報告,以找出提及術語 brake 的文件。 從傳回的文件中,尋找來自美國各州的報告,其中最相關的是該術語。

在下列範例要求中,包括只傳回 3 個聚集結果的計數參數,讓範例更容易遵循。

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

聚集參數的輸出會在 aggregations 物件中傳回,該物件顯示在包含查詢結果的 results 物件之前。 對於單一查詢,aggregations 物件中最多可以傳回 50,000 個值。

產生的 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": []

結合聚集類型

您可以使用不同類型的聚集來分析或分組查詢結果。 而且您可以在一個要求中結合多個聚集,以執行更多目標分析。

下列範例顯示由兩個術語運算子組成的要求。 第一個術語聚集會依 US STATE 值分組輸入文件,並選取 3 個群組。 第二個術語聚集適用於這 3 個群組中的每一個群組,並依 CITY 的值將它們進一步分組。 每個 STATE 群組只會傳回其中 2 個 CITY 子群組。

正在排除相關性參數,以便更容易讀取結果。

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

新訂單會產生結果,使芝加哥這個未包含在前一組結果中的城市表面。 當要求從依州/省分組開始時,結果中不會包括只有一個城市具有大量交通事故報告的伊利諾斯州/省 (Illinois)。 紐約和佛羅里達都有多個城市,有許多事故報告,因此產生了更多的全州比賽,並因此被送回。 當您先依城市分組時,結果會變更。

{
  "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 且其文字為 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 個相符文件都具有 LocationPerson 實體類型 ("matching_results": 3)。不過,只有 2 個相符文件具有 Company 實體類型。

依預設,會傳回前 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() 聚集會尋找與先前範例具有個別 filteraggregation 子句的相同結果。 不過,當使用 filter 子句時,結果會以不同方式分級。 您可以利用此差異,在 aggregation 子句內使用 filter() 子句來過濾一連串表示式的結果,如下一個範例所示。

從巢狀物件開始

在上述範例中,"matching_counts" 值代表符合過濾器及聚集的文件數。 您可能想要計算查詢回應中存在的 nested 物件數。 nested() 聚集可讓您變更用作其他聚集術語輸入的文件集。

例如,在下列查詢中,nested() 區段會選取所有 enriched_text.entities 巢狀物件作為 filter()term() 區段所使用的輸入。

{
  "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 聚集類型的第二個 範例

聚集類型

支援下列類型的聚合:

對於「文件擷取」專案類型,當您未在查詢要求中包括聚集參數時,會套用預設聚集要求。 如需相關資訊,請參閱 文件擷取專案聚集

如需如何提交查詢的相關資訊,請參閱 Discovery API 參考資料

平均值

傳回所有相符文件之間所指定欄位的平均值。

語法

average(field)

範例

產品價格樣本
產品 計價
I 系列 200
J 系列 450
X 系列 325

average 聚集類型套用至一組文件,其中 price 欄位包含表 1 所示的值時,結果為 325

average(price)=325

此聚集類型會執行終端機作業。 與其他聚集結合時,不會使用輸出作為下一個聚集的輸入。 輸出會以離散群組傳回。

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

對於第一個 term 聚集作業所傳回的每一個狀態,回應會顯示事件報告中指定的平均車輛速度。 請注意,第二個 term 聚集使用來自第一個 term 聚集的輸出,而不是來自 average 聚集的輸出作為其輸入。

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

此修飾元可縮小其之前聚集查詢的文件集。

語法

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 的文件,並依汽車製造年份將它們分組。 這些檔案分為 3 組,一組涉及 2000 年前製造的汽車的交通事故報告,一組涉及 2000 年製造的汽車,一組涉及 2000 年之後製造的汽車。

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

建立數值間隔區段來分類文件。

語法

histogram({field},{interval})

請使用單一數值欄位中的欄位值來說明該種類。 用來建立直方圖的欄位必須具有數字資料類型,例如 integerfloatdoubledate

不支援非數字類型,例如 string。 例如,"price": 1.30 是數字值,可以運作,而 "price": "1.30" 是字串,所以無法運作。

使用 interval 參數定義要分割結果的區段大小。 間隔值必須是整數、非負數。 選擇對欄位中的一般值進行分段有意義的值。

直方圖可以處理在欄位中指定的十進位值,但間隔必須是整數。

您可以選擇性地包括 name 參數來包括自訂名稱。

範例

例如,如果您的資料集包括數個項目的價格,例如: “price”: 1.30“price”: 1.99“price”: 2.99,則您可能會使用 1 的間隔,以便您看到在範圍 1 - 2 以及 23 中分組的所有項目。 您不想要使用 100 的間隔,因為所有資料都會在相同的區段中結束。

histogram(product_price,interval:1)

上限

傳回所有相符文件之間所指定欄位中的最高值。

語法

max(field)

範例

產品價格樣本
產品 計價
I 系列 200
J 系列 450
X 系列 325

max 聚集類型套用至一組文件,其中 price 欄位包含表 2 所示的值時,結果為 450

max(price)=450

此聚集類型會執行終端機作業。 與其他聚集結合時,不會使用輸出作為下一個聚集的輸入。 輸出會以離散群組傳回。

min

傳回所有相符文件之間所指定欄位中的最低值。

語法

min(field)

範例

產品價格樣本
產品 計價
I 系列 200
J 系列 450
X 系列 325

min 聚集類型套用至一組文件,其中 price 欄位包含表 3 所示的值時,結果為 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
          }
        ]
      }
    ]
  }
]

如需另一個範例,請參閱 從巢狀物件開始

分析兩個欄位之間的關係。

語法

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

第一個和第二個 {aggregation} 值必須是下列其中一種聚集類型:

  • term
  • group_by
  • histogram
  • timeslice

termgroup_by 聚集中的 relevancy 參數會被忽略。 pair 聚集類型會使用兩個聚集結果中的文件集組合來計算相關性值。

每個查詢要求只能使用一個配對聚集,且無法與任何其他聚集結合。

範例

例如,您可以指定 term(model_name) 作為第一個聚集,並指定 term(component_name) 作為第二個聚集。 每一個聚集都會傳回下列值作為聚集文件集的索引鍵:

  • term (model_name): Accord,CR-V
  • 術語 (component_name): 引擎、制動器、散熱器

每一個文件集的組合計算相關性值可能如下所示:

  • Accorpx 引擎
  • 一致 x 制動器
  • 協議 x 散熱器
  • CR-V x 引擎
  • CR-V x 制動器
  • CR-V x 散熱器

回應定義聚集結果的二維陣列,可在表格中表示。

對聚合範例
該表有行標題和列標題。 列標頭會識別汽車型號。 直欄標頭會識別汽車元件組件。 每一個資料格都會將汽車模型 (列) 相關性值乘以汽車元件 (標頭) 相關性值,以計算相關性評分。
車型 元件: 引擎 元件: 制動器 元件: 散熱器
協議 Accorpx 引擎 一致 x 制動器 協議 x 散熱器
CR-V CR-V x 引擎 CR-V x 制動器 CR-V x 散熱器

表格的每一個直欄及列陣列會以第一個及第二個聚集結果的相同順序來排序。 例如,如果您指定 term 聚集作為第一個引數,則產生的直欄陣列會依術語頻率排序。 如果您使用 timeslice 聚集作為第二個引數,則會依日期或時間來排序列陣列。

總和

在所有匹配的文件中加入指定欄位的值。

語法

sum(field)

範例

產品價格樣本
產品 計價
I 系列 200
J 系列 450
X 系列 325

sum 聚集類型套用至一組文件,其中 price 欄位包含表 6 所示的值時,結果為 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)

relevancy 設為 true 時,結果中會顯示相關性評分。 相關性測量頻率計數與符合查詢的其他文件相比的唯一性層次。 如果相關性顯示 2.0,表示兩個資料點相交的次數是預期的 2 倍。

如需其他範例,請參閱 分組文件結合聚集類型

timeslice

使用日期來建立間隔區段的特殊化直方圖。

語法

語法為 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": []
      }
      ...

此聚集類型會執行終端機作業。 與其他聚集結合時,不會使用輸出作為下一個聚集的輸入。 輸出會以離散群組傳回。

趨勢

根據關鍵字值過去的頻率變更,偵測在指定時段內關鍵字值頻率的急劇及非預期變更。

Sytnax

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

第一個 (facet) 聚集必須是下列其中一種聚集類型:

  • term
  • group_by

termgroup_by 聚集中的 relevancy 參數會被忽略。

第二個 (time_segments) 聚集必須是 timeslice 類型的聚集。

您也可以包括下列參數:

  • show_estimated_matching_results:true: 指出是否在結果中包含 estimated_matching_results 資訊。 此欄位包含預估在指定欄位中具有術語的文件數,或在查詢所傳回文件集的指定時間間隔內符合指定聚集中的條件的文件數。
  • show_total_matching_documents:true: 指出是否在結果中包含 total_matching_documents 資訊。 此欄位包含集合中在指定欄位中提及術語或符合條件的文件數。

每個查詢要求只能使用一個趨勢聚集,且無法與任何其他聚集結合。

範例

下列範例會使用下列聚集的結果組合來計算 趨勢指標趨勢指數:

  • term (flavor): vanilla、chocolate、mint
  • 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 年的月份 特性: 香草 特性: 巧克力 特性: 薄荷
一月 香草 x Jan 巧克力 x Jan 薄荷
二月 香草二月 巧克力 x 2 月 薄荷 x Feb
三月 香草 巧克力 x 瑪 薄荷 x 瑪
四月 香草四月 巧克力 x 4 月 薄荷
五月 香草五月 巧克力 x 五月 薄荷 x 五月
六月 vanilla x Jun 巧克力 x Jun 薄荷 x Jun

在下列範例回應中,關鍵資訊是 trend_indicator 值。 趨勢指標測量給定時間間隔內給定資料類型值的頻率與預期平均頻率相比的增加比例。 使用加權算術平均值,根據給定資料類型值的過去時間間隔頻率中的變更來計算例外平均頻率。

如果標準化殘值小於 -2,表示觀察頻率小於預期頻率。 如果它大於 2,則觀察頻率大於預期頻率。 如果標準化殘差大於或小於預期頻率 3 或以上,則會發生異常狀況,並暗示可能有值得調查的異常狀況。

例如,針對 vanilla 特性在 5 月的預期意見回饋提交數,是從先前收到的意見回饋提交數 (從 Jan 到 Apr) 計算出來的。 結果是 5.341。 五月份提交意見的實際數目為 10。 結果指出香草特性取得的意見回饋提交數目大約是預期的兩倍。 標準化殘差值為 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

termgroup_by 聚集中的 relevancy 參數會被忽略。

第二個 (time_segments) 聚集必須是 timeslice 類型的聚集。

您也可以包括下列參數:

  • show_estimated_matching_results:true: 指出是否在結果中包含 estimated_matching_results 資訊。 此欄位包含預估在指定欄位中具有術語的文件數,或在查詢所傳回文件集的指定時間間隔內符合指定聚集中的條件的文件數。
  • show_total_matching_documents:true: 指出是否在結果中包含 total_matching_documents 資訊。 此欄位包含集合中在指定欄位中提及術語或符合條件的文件數。

每個查詢要求只能使用一個主題聚集,且無法與任何其他聚集結合。

範例

{
    "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 月香草味冰淇淋的回饋意見提交的預期頻率,是根據之前 (從 Jan 到 Apr) 針對香草味收到的回饋意見提交數目,以及 5 月針對所有特性收到的回饋意見提交總數來計算。 不過,在 topic 聚集中,針對香草口味冰淇淋的預期回饋提交頻率,是根據針對香草口味收到的回饋提交數,以及針對所有口味在 5 月收到的回饋提交總數來計算。 在此範例中,預期頻率結果為 12.169,實際頻率為 10,而 topic_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
    }
  ]
}