1

私は、elasticsearch に次のネストされたサブ集計のセットを持っています (field2 は field1 のサブ集計であり、field3 は field2 のサブ集計です)。ただし、field3 の用語集約は、field3 を持たないドキュメントをバケット化しないことがわかりました。

私の理解では、field3 の用語クエリに加えて、Missing サブ集計クエリを使用してそれらをバケット化する必要があります。

しかし、それを以下のクエリに追加して両方をバケット化する方法がわかりません。

{
  "size": 0,
  "aggregations": {
    "f1": {
      "terms": {
        "field": "field1",
        "size": 0,
        "order": {
          "_count": "asc"
        },
        "include": [
          "123"
        ]
      },
      "aggregations": {
        "field2": {
          "terms": {
            "field": "f2",
            "size": 0,
            "order": {
              "_count": "asc"
            },
            "include": [
              "tr"
            ]
          },
          "aggregations": {
            "field3": {
              "terms": {
                "field": "f3",
                "order": {
                  "_count": "asc"
                },
                "size": 0
              },
              "aggregations": {
                "aggTopHits": {
                  "top_hits": {
                    "size": 1
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
4

1 に答える 1

4

バージョン 2.1.2 以降でmissingは、terms aggregate のパラメーターを使用できます。これにより、そのフィールドが欠落しているドキュメントの既定値を指定できます。(参考までに、このmissingパラメーターは 2.0 から使用できましたが、バグがあり、サブ集計で機能することができませんでした。ここで使用する方法です。)

     ...
     "aggregations": {
        "field3": {
          "terms": {
            "field": "f3",
            "order": {
              "_count": "asc"
            },
            "size": 0,
            "missing": "n/a"     <----- provide a default here
          },
          "aggregations": {
            "aggTopHits": {
              "top_hits": {
                "size": 1
              }
            }
          }
        }
      }

ただし、2.x より前の ES クラスターを使用している場合は、missing集約と同じ深さで集約を使用して、次のfield3ように「f3」が欠落しているドキュメントをバケット化できます。

     ...
     "aggregations": {
        "field3": {
          "terms": {
            "field": "f3",
            "order": {
              "_count": "asc"
            },
            "size": 0
          },
          "aggregations": {
            "aggTopHits": {
              "top_hits": {
                "size": 1
              }
            }
          }
        },
        "missing_field3": {
          "missing" : {
            "field": "f3"
          },
          "aggregations": {
            "aggTopMissingHit": {
              "top_hits": {
                "size": 1
              }
            }
          }
        }
      }
于 2016-02-12T04:22:45.837 に答える