ElasticSearch: условная сумма

#go #elasticsearch

# #Вперед #elasticsearch

Вопрос:

У меня есть записи, которые содержат столбец количества, который может быть отрицательным или положительным. Я хочу вычислить общее количество, где значения положительны.

Я знаю, что могу рассчитать сумму, используя elastic.NewSumAggregation().Field("quantity") , но я не уверен, как включить только положительные строки.

Любой орган может помочь? Спасибо

Ответ №1:

Добавление рабочего примера

Индексируйте примеры документов

 {
    "quantity": 10
}

{
    "quantity": -10
}

{
    "quantity": 25
}

{
    "quantity": -25
}
 

Поисковый запрос

 {
    "query": {
        "range": {
            "quantity": {. // filter only for positive quantity.
                "gte": 0
            }
        }
    },
    "aggs": {
        "quantity": {
            "sum": {
                "field": "quantity"
            }
        }
    }
}
 

И результат поиска

  "hits": [
            {
                "_index": "65188985",
                "_type": "_doc",
                "_id": "1",
                "_score": 1.0,
                "_source": {
                    "quantity": 10
                }
            },
            {
                "_index": "65188985",
                "_type": "_doc",
                "_id": "4",
                "_score": 1.0,
                "_source": {
                    "quantity": 25
                }
            }
        ]
    },
    "aggregations": { // note this aggregation part, which is sum of 10 and 25.
        "quantity": {
            "value": 35.0
        }
    }
 

Если вы хотите извлечь только часть агрегации, укажите size=0 для части запроса.

 {
    "size":0,
    "query": {
        "range": {
            "quantity": {
                "gte": 0
            }
        }
    },
    "aggs": {
        "quantity": {
            "sum": {
                "field": "quantity"
            }
        }
    }
}
 

Выше будет выведен ответ ниже

  "aggregations": {
        "quantity": {
            "value": 35.0
        }
    }