标量数学
最基本的数学表达式是标量表达式。标量表达式对数字执行数学运算。
例如,下面的表达式将两个数字相加
add(1, 1)
当此表达式发送到 /stream
处理程序时,它会响应
{
"result-set": {
"docs": [
{
"return-value": 2
},
{
"EOF": true,
"RESPONSE_TIME": 2
}
]
}
}
数学表达式可以嵌套。例如,在下面的表达式中,add
函数的输出是 pow
函数的第二个参数
pow(10, add(1,1))
此表达式返回以下响应
{
"result-set": {
"docs": [
{
"return-value": 100
},
{
"EOF": true,
"RESPONSE_TIME": 0
}
]
}
}
流标量数学
标量数学表达式也可以通过使用 select
流装饰器应用于流中的每个元组。select
函数包装元组流并选择要包含在每个元组中的字段。select
函数还可以使用数学表达式计算新值并将它们添加到传出元组中。
在下面的示例中,select
表达式包装了一个搜索表达式。select
函数选择 response_d
字段并使用 mult
数学表达式计算一个名为 new_response
的新字段。
mult
表达式的第一个参数是 response_d
字段。第二个参数是标量值 10。这将每个元组中 response_d
字段的值乘以 10。
select(search(testapp, q="*:*", fl="response_d", sort="response_d desc", rows="3"),
response_d,
mult(response_d, 10) as new_response)
当此表达式发送到 /stream
处理程序时,它会响应
{
"result-set": {
"docs": [
{
"response_d": 1080.3692514541938,
"new_response": 10803.692514541937
},
{
"response_d": 1067.441598608506,
"new_response": 10674.41598608506
},
{
"response_d": 1059.8400090891566,
"new_response": 10598.400090891566
},
{
"EOF": true,
"RESPONSE_TIME": 12
}
]
}
}