应用过滤器以使用弹性搜索排除嵌套对象字段上的特定数值
Applying a filter to exclude a specific numerical value on a nested object's field with elastic search
我正在尝试通过 elasticsearch 计算我的数据库中某个字段的聚合平均值。
我在没有任何过滤的情况下计算 av 值没有任何问题:
{
"query": {
"match_all":{}
},
"size": 0,
"aggs": {
"avg_quantity": {
"avg": {
"field": "license_offer.unit_price"
}
}
}
}
但是我需要从聚合文档中排除 license_offer.unit_price 为 0 的文档(licence_offer 是许可证中的嵌套对象)。
我尝试了不同的东西,这是我最近的尝试:
{
"size": 0,
"query": {
"constant_score": {
"filter": {
"license_offer.unit_price": {
"gte": 0
}
}
}
},
"aggs": {
"quantity_stats": {
"stats": {
"field": "license_offer.unit_price"
}
}
}
}
但我收到一个错误:
"type": "parsing_exception",
"reason": "no [query] registered for [license_offer.unit_price]",
如何通过弹性搜索应用过滤器来排除嵌套对象字段上的特定数值?
您的查询不正确,您只是缺少 range
关键字:
{
"size": 0,
"query": {
"constant_score": {
"filter": {
"range": { <--- add this
"license_offer.unit_price": {
"gte": 0
}
}
}
}
},
"aggs": {
"quantity_stats": {
"stats": {
"field": "license_offer.unit_price"
}
}
}
}
您还可以将过滤器移动到聚合部分:
{
"size": 0,
"aggs": {
"only_positive": {
"filter": {
"range": {
"license_offer.unit_price": {
"gt": 0
}
}
},
"aggs": {
"quantity_stats": {
"stats": {
"field": "license_offer.unit_price"
}
}
}
}
}
}
我正在尝试通过 elasticsearch 计算我的数据库中某个字段的聚合平均值。 我在没有任何过滤的情况下计算 av 值没有任何问题:
{
"query": {
"match_all":{}
},
"size": 0,
"aggs": {
"avg_quantity": {
"avg": {
"field": "license_offer.unit_price"
}
}
}
}
但是我需要从聚合文档中排除 license_offer.unit_price 为 0 的文档(licence_offer 是许可证中的嵌套对象)。
我尝试了不同的东西,这是我最近的尝试:
{
"size": 0,
"query": {
"constant_score": {
"filter": {
"license_offer.unit_price": {
"gte": 0
}
}
}
},
"aggs": {
"quantity_stats": {
"stats": {
"field": "license_offer.unit_price"
}
}
}
}
但我收到一个错误:
"type": "parsing_exception",
"reason": "no [query] registered for [license_offer.unit_price]",
如何通过弹性搜索应用过滤器来排除嵌套对象字段上的特定数值?
您的查询不正确,您只是缺少 range
关键字:
{
"size": 0,
"query": {
"constant_score": {
"filter": {
"range": { <--- add this
"license_offer.unit_price": {
"gte": 0
}
}
}
}
},
"aggs": {
"quantity_stats": {
"stats": {
"field": "license_offer.unit_price"
}
}
}
}
您还可以将过滤器移动到聚合部分:
{
"size": 0,
"aggs": {
"only_positive": {
"filter": {
"range": {
"license_offer.unit_price": {
"gt": 0
}
}
},
"aggs": {
"quantity_stats": {
"stats": {
"field": "license_offer.unit_price"
}
}
}
}
}
}