Я пытаюсь получить разницу во времени между двумя записями журнала, такими как RequestExecuted и RequestReceived, с именем MessageIdentifier. Эти значения связаны уникальным идентификатором TransactionId. Ниже мой код для выполнения логики.
int timetaken=0;
int start=0;
String TransactionId;
int end=0;
for(int i = 0; i < 10; ++i){
if (doc['dissect.MessageIdentifier'].value[i]=='RequestReceived') {
start=params._source.dissect.timestamp[i];
TransactionId=params._source.dissect.TransactionId[i];
}
if( doc['dissect.MessageIdentifier'].value[i] =='RequestExecuted'
&& params._source.dissect.TransactionId == TransactionId) {
end=params._source.dissect.timestamp[i];
timetaken = end - start;
return timetaken;
}
}
Когда я компилирую свой безболезненный скрипт, он выдает ошибку:
lang": "painless",
"caused_by": {
"type": "illegal_argument_exception",
"reason": "Attempting to address a non-array-like type [java.lang.String] as an array."
Вот фрагмент индекса:
Ваша помощь будет весьма признательна.
for (int i = 0; i < 10; ++i)
? У вас есть доступ только к контексту текущего документа, а не ко всему. Кроме того, вы используетеscript_field
s илиscripted_metric
aggs? - person Joe Sorocin   schedule 04.05.2020dissect
представляет собой массив элементов? - person Joe Sorocin   schedule 05.05.2020