给出这样的数据模型结构,
{
Id: 123,
"string_facet": [
{
"name": "make",
"value": "Audi"
},
{
"name": "carListType",
"value": "PERSON EU"
},
{
"name": "modelType",
"value": ""
},
{
"name": "engineBrand",
"value": "APT"
},
{
"name": "typeDescription",
"value": "8D2"
}
],
"number_facet": [
{
"name": "typeNumber",
"value": 4614
},
{
"name": "serialNumber",
"value": 2
},
{
"name": "engineSize",
"value": 18
},
{
"name": "horsePower",
"value": 125
},
{
"name": "kw",
"value": 92
},
{
"name": "engineVolume",
"value": 1781
},
{
"name": "listType",
"value": 0
}
],
"dateTime_facet": [
{
"name": "fromDate",
"value": "1999-04-01T00:00:00"
},
{
"name": "toDate",
"value": "2000-10-01T00:00:00"
}
]
}
我希望获得聚合方面名称和每个名称的值。但是,我只对具有特定名称的方面感兴趣,例如: make 和 engineBrand 。请注意,facet是嵌套类型。
我尝试了以下.NEST表达式,但它仍然返回所有方面名称。
.Global("global", g => g
.Aggregations(ag => ag
.Filter("global_makes", f => f
.Filter(ff => ff
.Nested(n => n
.Path("string_facet")
.Filter(pf => pf.Term("string_facet.name", "make")))
)
.Aggregations(agg => agg
.Nested("nested_string_facet", nested => nested
.Path("string_facet")
.Aggregations(stringFacet => stringFacet
.Terms("name", nameAgg => nameAgg.Field("string_facet.name").Size(0)
.Aggregations(nameAggNext => nameAggNext
.Terms("value", valueAgg => valueAgg.Field("string_facet.value").Size(0))
)
)
)
)
)
)
)
)
);
我在全局范围内有一个过滤器(失去传入查询的范围),然后仅在与“make”匹配的string_facet.name上进行过滤,但结果仍然包括所有其他名称。如何过滤掉聚合以仅包含 name 为“make”的存储桶?
答案 0 :(得分:0)
这有帮助。 https://github.com/elastic/elasticsearch/issues/4449
基本上必须将过滤器部分更深入地移动到聚合中。