Как добавить условие в ElasticSearch Aggregation (мин / макс)? - PullRequest
0 голосов
/ 24 февраля 2020

Я хочу запросить мой Elasti c -Поиск, чтобы получить минимальную цену значений, которые имеют только положительное значение. Мои цены также могут быть нулевыми и -1; поэтому я не хочу, чтобы моя минимальная агрегация возвращала 0 или -1. Я знаю, что мне нужно добавить скрипт в запрос (или фильтр), но я не знаю как. Мой текущий код:

public function minPriceAggregation($minName, $field = 'price')
    {
        if ($field) {
            $this->aggregation[$minName] = [
                'min' => [
                    'field' => $field
                ]
            ];
        }
        return $this;
    }

Этот запрос всегда возвращает -1; Я хочу игнорировать значения <0 и иметь только минимальные положительные значения. </p>

Что-то вроде:

public function minPriceAggregation($minName, $field = 'price')
    {
        if ($field) {
            $this->aggregation[$minName] = [
                'min' => [
                    'field' => $field,
                    'script' => [
                        'source' => 'return _value > 0 ?: _value' //What's the correct script here??
                    ]
                ]
            ];
        }
        return $this;
    }

1 Ответ

0 голосов
/ 24 февраля 2020

Попробуйте это:

public function minPriceAggregation($minName, $field = 'price')
    {
        if ($field) {
            $this->aggregation[$minName] = [
                'min' => [
                    'script' => [
                        'source' => 'return Math.max(0, doc["price"].value)'
                    ]
                ]
            ];
        }
        return $this;
    }
...