Я пытаюсь вычислить агрегированное среднее значение поля в моем db через 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]",
Как применить фильтр, чтобы исключить конкретное численное значение на поле вложенного объекта с эластичным поиском?
благодаря @val могли бы вы показать как вы это сделаете, специально исключив значение 0? –
Используйте 'gt' вместо' gte'? – Val
Да, я просто сделал это, но есть ли способ сделать это, не используя логику диапазона, а скорее логику «исключения»/фильтрации (что-то вроде «не 0») –