變數

使用者指南的這一節說明如何使用數學運算式指派和視覺化變數。

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