2016-12-07 2 views
1

Мне нужно получить общее значение поля в Kibana используя сценарий поле.Как получить общую стоимость поля в kibana 4.x

например), если идентификатор поля имеют значения, как 1, 2, 3, 4, 5

Я ищу sum все значения ид, я ожидаю выход 15.

Мне нужно получить приведенную ниже формулу после получения всего поля.

lifetime=a-b-c-(d-e-f)*g 

здесь а, б, в, г, д, е, ж все общее количество каждого значения поля.

для получения дополнительной информации, пожалуйста, обратитесь к этому question, который поднят мной.

ответ

1

Вы можете определенно использовать суммарные суммы для получения суммы id, но для дальнейшего приравнивания вашей формулы вы можете посмотреть pipeline aggregations, чтобы использовать сумму для дальнейших вычислений.

Посмотрите на bucket script aggregation, с правильной ведровой дорожкой для объединения сумм, вы можете достичь своего решения.

Для образцов документов

{ 
    "a":100, 
    "b":200, 
    "c":400, 
    "d":600 
} 

запроса

{ 
    "size": 0, 
    "aggs": { 
     "result": { 
     "terms": {"script":"'nice to have it here'"}, 
     "aggs": { 
      "suma": { 
       "sum": { 
        "field": "a" 
       } 
      }, 
      "sumb": { 
       "sum": { 
        "field": "b" 
       } 
      }, 
      "sumc": { 
       "sum": { 
        "field": "c" 
       } 
      }, 
      "equation": { 
       "bucket_script": { 
        "buckets_path": { 
         "suma": "suma", 
         "sumb": "sumb", 
         "sumc" : "sumc" 
        }, 
        "script": "suma + sumb + 2*sumc" 
       } 
      } 
     } 
     } 
    } 
} 

Теперь вы можете уверенно добавить термин фильтр на каждую сумму AGG фильтровать суммирование для каждой суммы агрегатора.

+0

О! это очень трудно понять. если вы не возражаете, можете ли вы объяснить простым примером, чтобы воспроизвести мою формулу? –

+0

Невозможно преобразовать сборку elasticsearch в виде графика кибаны? http://stackoverflow.com/q/37850262/5528059 –

+1

Конечно, теперь я понимаю, чего вы пытаетесь достичь, поэтому a, b, c, d ... представляют собой сумму id, рассчитанную для разных наборов документов, и вы затем захотите объединить их в формулу. дайте мне некоторое время, я постараюсь дать вам меньшую реализацию. – user3775217

1

Вы могли бы сделать что-то подобное в вашем scripted fields:

doc['id'].value 

Таким образом, вы могли бы использовать sum агрегацию, чтобы получить общее значение в Kibana.

Это SO может пригодиться!

EDIT

Если вы пытаетесь сделать это с помощью Elasticsearch, вы могли бы сделать что-то подобное в вашем теле запроса:

"aggs":{ 
     "total":{ 
      "sum":{ 
       "script":"doc['id'].value" 
      } 
      } 
     } 

Вы можете следить за этим ref, но если вы используете painless, убедитесь, что вы включили его в lang. related SO

+0

спасибо! можете ли вы объяснить бит больше. 'doc ['id']. value' в kibana он возвращает записи для каждой строки, а не суммы поля id. где я должен применять метод суммирования elasticsearch или kibana? может быть, это действительно глупо, но я не знаю :-) пожалуйста, просмотрите мой обновленный вопрос. –

+0

Вы можете либо сделать это с 'ES', либо если он использует' Kibana', вы можете использовать агрегацию 'sum' в графе , – Kulasangar

+0

@BilalUsean Я обновил ответ. – Kulasangar

Смежные вопросы