我有一个具有以下映射的索引:
{
"mappings": {
"properties": {
"id": {"type": "keyword"},
"sortingKey": {"type": "integer"},
"articleName": {"type": "text"},
"category": {"type": "keyword"},
"color": {"type": "keyword"},
"season": {"type": "keyword"},
"stocks": {
"type": "nested",
"properties": {
"storageId": {"type": "keyword"},
"availableStock": {"type": "integer"}
}
}
}
}
更简单地说,对象看起来像:
{
id: 123,
sortingKey: 10
articleName: "Flower Dress",
category: "dress",
color: "red",
season: "summer",
stocks: {
[storageId: 1, availableStock: 2],
[storageId: 2, availableStock: 1],
[storageId: 3, availableStock: 4],
...
}
}
在搜索之前,我会得到几个我关心的storageId,例如2和3。
我想做的是: -仅将我关心的storageIds上的可用库存相加 -如果上级单据的总库存低于最小值,则应将其过滤掉 -最后,所有文件应按其排序键进行排序
我尝试过的是根据允许的storageId进行过滤,并使用聚合对availableStock进行求和,但最后我不知道如何按sortingKey
对它们进行排序。我也希望我可以在某处注入inner_hits: {}
,以便使汇总返回通过过滤器的文档。
这是我的查询:
{
"size": 0,
"aggs": {
"buckets": {
"terms": {"field": "id"},
"aggs": {
"stock": {
"nested": {"path": "stocks"},
"aggs": {
"storage_filter": {
"filter": {"terms": {"stocks.storageId": ["25_0", "25_1"]}},
"aggs": {
"summed": {
"sum": {"field": "stocks.availableStock"}}}}}}}}}}