变量

本用户指南部分介绍如何使用数学表达式分配和可视化变量。

Let 表达式

let 表达式设置变量,并默认返回最后一个变量的值。任何流表达式或数学表达式的输出都可以设置为变量。

下面是一个简单的示例,设置三个变量 abc。变量 ab 设置为数组。变量 c 设置为 ebeAdd 函数的输出,该函数对两个数组执行逐元素加法。

let(a=array(1, 2, 3),
    b=array(10, 20, 30),
    c=ebeAdd(a, b))

在响应中,请注意返回了最后一个变量 c

{
  "result-set": {
    "docs": [
      {
        "c": [
          11,
          22,
          33
        ]
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 4
      }
    ]
  }
}

回显变量

可以通过将 echo 变量设置为 true 来输出所有变量。

let(echo=true,
    a=array(1, 2, 3),
    b=array(10, 20, 30),
    c=ebeAdd(a, b))

当此表达式发送到 /stream 处理程序时,它会响应

{
  "result-set": {
    "docs": [
      {
        "a": [
          1,
          2,
          3
        ],
        "b": [
          10,
          20,
          30
        ],
        "c": [
          11,
          22,
          33
        ]
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 0
      }
    ]
  }
}

可以通过向 echo 参数提供以逗号分隔的变量列表来回显一组特定的变量。由于已提供变量,因此假定值为 true

let(echo="a,b",
    a=array(1, 2, 3),
    b=array(10, 20, 30),
    c=ebeAdd(a, b))

当此表达式发送到 /stream 处理程序时,它会响应

{
  "result-set": {
    "docs": [
      {
        "a": [
          1,
          2,
          3
        ],
        "b": [
          10,
          20,
          30
        ]
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 0
      }
    ]
  }
}

可视化变量

let 表达式还可以包括一个 zplot 表达式,可用于可视化变量。

在下面的示例中,变量 ab 设置为数组。zplot 函数将变量作为输出中的 xy 字段输出。

let(a=array(1, 2, 3),
    b=array(10, 20, 30),
    zplot(x=a, y=b))

当此表达式发送到 /stream 处理程序时,它会响应

{
  "result-set": {
    "docs": [
      {
        "x": 1,
        "y": 10
      },
      {
        "x": 2,
        "y": 20
      },
      {
        "x": 3,
        "y": 30
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 0
      }
    ]
  }
}

使用此方法,可以使用 Zeppelin-Solr 可视化变量。在下面的示例中,数组显示为表格格式。

variables

一旦采用表格格式,我们就可以使用绘图或图表可视化之一来绘制变量。下面的示例显示了绘制在折线图上的变量

variables1

缓存变量

变量可以在运行数学表达式的 Solr 节点上的内存中缓存。然后可以在将来的表达式中使用缓存的变量。任何可以设置为变量的对象(包括数据结构和数学模型)都可以缓存到内存中以供将来使用。

putCache 函数将变量添加到缓存中。

在下面的示例中,一个数组被缓存到工作空间 workspace1 中并绑定到键 key1。该工作空间允许不同的用户将对象缓存到他们自己的工作空间中。putCache 函数返回添加到缓存中的变量。

let(a=array(1, 2, 3),
    b=array(10, 20, 30),
    c=ebeAdd(a, b),
    d=putCache(workspace1, key1, c))

当此表达式发送到 /stream 处理程序时,它会响应

{
  "result-set": {
    "docs": [
      {
        "d": [
          11,
          22,
          33
        ]
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 11
      }
    ]
  }
}

getCache 函数通过其工作空间和键从缓存中检索对象。

在下面的示例中,getCache 函数检索上面缓存的数组并将其分配给变量 a

let(a=getCache(workspace1, key1))

当此表达式发送到 /stream 处理程序时,它会响应

{
  "result-set": {
    "docs": [
      {
        "a": [
          11,
          22,
          33
        ]
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 11
      }
    ]
  }
}

listCache 函数可用于列出工作空间或特定工作空间中的键。

在下面的示例中,listCache 将缓存中的所有工作空间作为字符串数组返回。

let(a=listCache())

当此表达式发送到 /stream 处理程序时,它会响应

{
  "result-set": {
    "docs": [
      {
        "a": [
          "workspace1"
        ]
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 0
      }
    ]
  }
}

在下面的示例中,列出了特定工作空间中的所有键

let(a=listCache(workspace1))

当此表达式发送到 /stream 处理程序时,它会响应

{
  "result-set": {
    "docs": [
      {
        "a": [
          "key1"
        ]
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 0
      }
    ]
  }
}

removeCache 函数可用于从特定工作空间中删除键。removeCache 函数从缓存中删除键并返回被删除的对象。

在下面的示例中,上面缓存的数组从缓存中删除。

let(a=removeCache(workspace1, key1))

当此表达式发送到 /stream 处理程序时,它会响应

{
  "result-set": {
    "docs": [
      {
        "a": [
          11,
          22,
          33
        ]
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 0
      }
    ]
  }
}