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"
}
}
}
}
}
}
{
"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"
]
}
}
}
}
]
}
}
}
{
"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()"
}
"source": "doc['ilosc_do_sprzedazy'].value < doc['magazyny.ilosc_w_magazynie'].sum()"
}