Cześć.

Utworzyłem index w elasticu, który przechowuje listę produktów z ich ilością sprzedażową, oraz dodatkowo listą magazynów wraz z ilością tego produktu na poszczególnym magazynie.

Dokument wygląda w ten sposób

Kod
PUT /moj_index
{
  "mappings": {
    "properties": {
      "nazwa_produktu": {
        "type": "text"
      },
      "ilosc_do_sprzedazy": {
        "type": "integer"
      },
      "magazyny": {
        "type": "nested",
        "properties": {
          "nazwa_magazynu": {
            "type": "keyword"
          },
          "ilosc_w_magazynie": {
            "type": "integer"
          }
        }
      }
    }
  }
}


Szukam sposobu aby wyfiltrować te produkty, których ilość do sprzedaży jest mniejsza niż suma tego produktu na wybranych magazynach.
Kod
GET /moj_index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "script": {
            "script": {
              "source": "doc['ilosc_do_sprzedazy'].value < doc['magazyny.ilosc_w_magazynie'].sum()"
            }
          }
        }
      ],
      "filter": [
        {
          "nested": {
            "path": "magazyny",
            "query": {
              "terms": {
                "magazyny.nazwa_magazynu": [
                  "Magazyn A",
                  "Magazyn C"
                ]
              }
            }
          }
        }
      ]
    }
  }
}


Powyższe query nie zwraca mi żadnych wyników, tak jakby ten skrypt nie działał poprawnie.
Kod
"script": {
              "source": "doc['ilosc_do_sprzedazy'].value < doc['magazyny.ilosc_w_magazynie'].sum()"
            }