#elasticsearch #aggregate #aggregation
#elasticsearch #агрегировать #агрегация
Вопрос:
Вычисляемая категория — это скриптовое поле в запросе. Я хочу выполнить еще один уровень агрегации для этого скриптового поля. Возможно ли это? Если да, пожалуйста, помогите мне.
Мой запрос :-
{
"from": 0,
"size": 0,
"query": {
"bool": {}
},
"aggs": {
"stakeholder_category": {
"terms": {
"field": "stakeholder_level",
"size": 214748364
},
"aggs": {
"Coverage-Calculation": {
"terms": {
"field": "stakeholder_name",
"size": 214748364
},
"aggs": {
"Total-Hours": {
"sum": {
"field": "field_capacity_building_duration"
}
},
"include_source": {
"top_hits": {
"size": 1,
"_source": {
"includes": [
"state_location",
"district_location"
]
}
}
},
"Calculated-Category": {
"bucket_script": {
"buckets_path": {
"NumberOfEngagements": "_count",
"TotalHours":"Total-Hours"
},
"script": {
"lang": "painless",
"source": """
if (params.TotalHours >= 20 amp;amp; params.NumberOfEngagements >= 2) {
return 1;
} else if(params.TotalHours >3) {
return 2 ;
}
else if(params.TotalHours >3) {
return 2 ;
}
else if(params.TotalHours >=1 amp;amp; params.TotalHours <=3) {
return 3 ;
}
else if(params.TotalHours ==0) {
return 4 ;
}
"""
}
}
}
}
}
}
}
}
}
Из приведенного выше запроса мне нужно агрегировать по вычисляемой категории скриптового поля. Можем ли мы выполнить агрегацию по скриптовому полю? Если да, то как?
Результат приведенного выше запроса будет примерно таким
{
"key" : "CHUNUSINGH GAUTAM",
"doc_count" : 1,
"include_source" : {
"hits" : {
"total" : 1,
"max_score" : 1.0,
"hits" : [
{
"_index" : "elasticsearch_index_apffatest_coverage_new",
"_type" : "coverage_new",
"_id" : "entity:paragraph/3826125:en",
"_score" : 1.0,
"_source" : {
"district_location" : [
"Raipur"
],
"state_location" : [
"Chhattisgarh"
]
}
}
]
}
},
"Total-Hours" : {
"value" : 0.0
},
"Calculated-Category" : {
"value" : 4.0
}
},
{
"key" : "SAVITA DHSH test",
"doc_count" : 1,
"include_source" : {
"hits" : {
"total" : 1,
"max_score" : 1.0,
"hits" : [
{
"_index" : "elasticsearch_index_apffatest_coverage_new",
"_type" : "coverage_new",
"_id" : "entity:paragraph/3747567:en",
"_score" : 1.0,
"_source" : {
"district_location" : [
"Raipur"
],
"state_location" : [
"Chhattisgarh"
]
}
}
]
}
},
"Total-Hours" : {
"value" : 3.0
},
"Calculated-Category" : {
"value" : 3.0
}
}
Мне нужно агрегировать, если вычисляемая категория имеет несколько одинаковых значений, тогда она должна объединяться со своим количеством, как и предыдущие термины агрегации полей.
Комментарии:
1. Каков ожидаемый результат? Не сразу понятно, чего вы хотите достичь.
2. @Joe Мне нужно агрегировать, если вычисляемая категория имеет несколько одинаковых значений, тогда она должна объединяться со своим количеством, как и предыдущие термины агрегации полей. Я обновил вопрос выводом, который я получаю в данный момент. Но последнее поле не агрегируется. Мне нужно выполнить агрегацию скриптового поля, вычисляемого по запросу.