变量

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

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
      }
    ]
  }
}