Я пытаюсь получить доступ к полям документа в безболезненном сценарии в таких агрегатах, как следующие:
"aggs": {
"errors": {
"nested": {
"path": "summary.testResult.testSuites.testCases.errors"
},
"aggs": {
"message": {
"terms": {
"field": "summary.testResult.testSuites.testCases.errors.message.keyword",
"size": 20,
"script": {
"source": "def total=0;
for (int i = 0; i < doc['summary']['testResult'].length; ++i)
total += doc['summary']['testResult']['numOfErrors'].value;
return total;"
}
}
}
}
}
}
Но после некоторого исследования я понимаю, что
"Когда оба поляи параметры сценария настроены для агрегирования, сценарий будет обрабатываться как сценарий значений. В то время как обычные сценарии оцениваются на уровне документа (т. е. сценарий имеет доступ ко всем данным, связанным с документом), сценарии значений оцениваются науровень значения. В этом режиме значения извлекаются из настроенного поля, а сценарий используется для применения «преобразования» к этим значениям / с. "
в соответствии с https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html#_values_source
Но мне нужно, чтобы сценарий оценивался на уровне документа, чтобы я мог выполнять некоторые сложные вычисления (не ограничиваясь сложением).Есть ли способ добиться того, чего я хочу?
Обновление: я обнаружил, что я могу получать документы, принадлежащие определенному сегменту в результатах поиска, с помощью агрегирования Top Hits, но это позволяет мне получить максимум100 документов, так что это не возможное решение.