要按嵌套文档的总和进行过滤,您可以使用Elasticsearch的嵌套聚合功能来实现。下面是一个示例代码,演示如何按嵌套文档的总和过滤Elasticsearch:
首先,假设您有一个名为"nested_docs"的索引,其中包含一个嵌套的"products"字段。"products"字段是一个数组,每个元素都是一个嵌套文档,包含"name"和"price"字段。
创建索引和文档:
PUT nested_docs
{
"mappings": {
"properties": {
"products": {
"type": "nested",
"properties": {
"name": { "type": "text" },
"price": { "type": "float" }
}
}
}
}
}
POST nested_docs/_doc
{
"products": [
{ "name": "Product 1", "price": 10 },
{ "name": "Product 2", "price": 20 }
]
}
POST nested_docs/_doc
{
"products": [
{ "name": "Product 3", "price": 5 },
{ "name": "Product 4", "price": 15 }
]
}
使用嵌套聚合进行过滤:
GET nested_docs/_search
{
"size": 10,
"query": {
"nested": {
"path": "products",
"query": {
"range": {
"products.price": {
"gte": 15
}
}
},
"inner_hits": {}
}
},
"aggs": {
"total_price": {
"nested": {
"path": "products"
},
"aggs": {
"sum_price": {
"sum": {
"field": "products.price"
}
}
}
}
}
}
在上述示例中,我们使用nested
查询过滤了products.price
大于等于15的文档,并使用inner_hits
来获取匹配的嵌套文档。然后,在aggs
部分中,我们使用nested
聚合来计算所有嵌套文档的总和。
注意,嵌套聚合将只计算匹配的嵌套文档的总和,而不是整个索引的总和。
希望这个示例能帮助您解决问题!
下一篇:按嵌套引用筛选Mongoose