Memfilter hasil agregasi

Oct 06 2020

Pertanyaan ini adalah subpertanyaan dari pertanyaan ini . Posting sebagai pertanyaan terpisah untuk diperhatikan.

Contoh Dokumen:

{
  "id":1,
  "product":"p1",
  "cat_ids":[1,2,3]
}
{
  "id":2,
  "product":"p2",
  "cat_ids":[3,4,5]
}
{
  "id":3,
  "product":"p3",
  "cat_ids":[4,5,6]
}

Tanyakan: Untuk mendapatkan produk yang termasuk dalam kategori tertentu. misalnya cat_id = 3

Pertanyaan:

GET product/_search 
{
 "size": 0,
 "aggs": {
   "cats": {
     "terms": {
       "field": "cats",
       "size": 10
     },"aggs": {
       "products": {
         "terms": {
           "field": "name.keyword",
           "size": 10
         }
       }
     }
   }
 }
}

Pertanyaan:

  1. Cara memfilter hasil agregat untuk cat_id = 3 di sini. Saya mencoba bucket_selector juga tetapi tidak berhasil.

    Catatan: Karena pemfilteran cat_ids multi-nilai dan kemudian agregasi tidak berfungsi

Jawaban

1 ESCoder Oct 07 2020 at 05:36

Anda dapat memfilter nilai , atas dasar keranjang yang akan dibuat.

Anda dapat memfilter nilai untuk pembuatan keranjang. Ini dapat dilakukan dengan menggunakan parameter sertakan dan kecualikan yang didasarkan pada string ekspresi reguler atau array nilai yang tepat. Selain itu, klausa yang disertakan dapat memfilter menggunakan ekspresi partisi.

Menambahkan contoh yang berfungsi dengan data indeks, kueri penelusuran, dan hasil penelusuran

Indeks Data:

{
  "id":1,
  "product":"p1",
  "cat_ids":[1,2,3]
}
{
  "id":2,
  "product":"p2",
  "cat_ids":[3,4,5]
}
{
  "id":3,
  "product":"p3",
  "cat_ids":[4,5,6]
}

Kueri Pencarian:

{
  "size": 0,
  "aggs": {
    "cats": {
      "terms": {
        "field": "cat_ids",
        "include": [                   <-- note this
          3
        ]
      },
      "aggs": {
        "products": {
          "terms": {
            "field": "product.keyword",
            "size": 10
          }
        }
      }
    }
  }
}

Hasil pencarian:

"aggregations": {
    "cats": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": 3,
          "doc_count": 2,
          "products": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
              {
                "key": "p1",
                "doc_count": 1
              },
              {
                "key": "p2",
                "doc_count": 1
              }
            ]
          }
        }
      ]
    }