変数

ユーザーガイドのこのセクションでは、数式を使用して変数を割り当てて可視化する方法について説明します。

let 式

let 式は変数を設定し、デフォルトでは最後の変数の値を返します。任意のストリーミング式または数式の出力を変数に設定できます。

以下は、3 つの変数 abc を設定する簡単な例です。変数 ab は配列に設定されています。変数 c は、2 つの配列の要素ごとの加算を実行する 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 関数は、変数を output の x フィールドと y フィールドとして出力します。

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