Berikut data saya:

{
 id: 1
 array1: [
  {
   type: "A",
   value: 20
  },
  {
   type: "B",
   value: 40
  }
 ]
},
{
 id: 2
 array1: [
  {
   type: "A",
   value: 30
  },
  {
   type: "B",
   value: 100
  }
 ]
}

Yang ingin saya lakukan adalah menjumlahkan nilai array1 di mana type = A, di sini jumlahnya adalah 20+30 = 50.

Saya mencoba menjumlahkan nilainya, tetapi saya tidak tahu cara menentukan hanya pada tipe A. Bagaimana saya bisa melakukannya? Terima kasih atas bantuanmu :)

1
pham01 19 November 2020, 17:51

1 menjawab

Jawaban Terbaik

Anda perlu menggunakan agregasi filter bersama dengan jumlah agregasi, untuk mencapai kasus penggunaan Anda

Pemetaan Indeks:

{
  "mappings": {
    "properties": {
      "array1": {
        "type": "nested"
      }
    }
  }
}

Kueri Penelusuran:

{
  "size":0,
   "aggs": {
      "nested_agg": {
         "nested": {
            "path": "array1"
         },
         "aggs": {
            "filtered_agg": {
               "filter": {
                  "term": {
                     "array1.type.keyword": "A"
                  }
               },
               "aggs": {
                  "my_agg": {
                     "sum": {
                        "field": "array1.value"
                     }
                  }
               }
            }
         }
      }
   }
}

Hasil Penelusuran:

"aggregations": {
    "nested_agg": {
      "doc_count": 4,
      "filtered_agg": {
        "doc_count": 2,
        "my_agg": {
          "value": 50.0
        }
      }
    }
  }
1
ESCoder 19 November 2020, 15:07