1 분 소요

개요


예제

  • 데이터
    POST painless_test/_doc
    {
      "@timestamp": "2022-05-01T07:00:00.000Z",
      "cluster": "cluster-01",
      "resource": [
        {
          "name": "node-01",
          "cpu": 1,
          "memory": 11,
          "disk": 111
        },
        {
          "name": "node-02",
          "cpu": 2,
          "memory": 22,
          "disk": 222
        },
        {
          "name": "node-03",
          "cpu": 3,
          "memory": 33,
          "disk": 333
        }
      ]
    }
  • 요청
    GET painless_test/_search
    {
      "query": {
        "bool": {
          "must": [
            {
              "range": {
                "@timestamp": {
                  "gte": "2022-05-01T07:00:00.000Z",
                  "lt": "2022-05-01T07:01:00.000Z"
                }
              }
            }
          ]
        }
      },
      "script_fields": {
        "cluster": {
          "script": {
            "lang": "painless",
            "source": "params._source.cluster"
          }
        },
        "name": {
          "script": {
            "lang": "painless",
            "source": "def list = new ArrayList(); for (item in params._source.resource) {list.add(item.name);} return list;"
          }
        },
        "cpu_sum": {
          "script": {
            "lang": "painless",
            "source": "int sum = 0; for (item in params._source.resource) {sum += item.cpu;} return sum;"
          }
        },
        "memory_sum": {
          "script": {
            "lang": "painless",
            "source": "int sum = 0; for (item in params._source.resource) {sum += item.memory;} return sum;"
          }
        },
        "disk_sum": {
          "script": {
            "lang": "painless",
            "source": "int sum = 0; for (item in params._source.resource) {sum += item.disk;} return sum;"
          }
        },
        "timestamp": {
          "script": {
            "lang": "painless",
            "source": "params._source['timestamp']"
          }
        }
      }
    }
  • 응답
{
  "took": 8,
  "timed_out": false,
  "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 },
  "hits":
    {
      "total": { "value": 1, "relation": "eq" },
      "max_score": 1.0,
      "hits":
        [
          {
            "_index": "painless_test",
            "_type": "_doc",
            "_id": "w2alaYABFxYHVJl7ArL4",
            "_score": 1.0,
            "fields":
              {
                "cluster": ["cluster-01"],
                "cpu_sum": [6],
                "name": ["node-01", "node-02", "node-03"],
                "disk_sum": [666],
                "memory_sum": [66],
                "datacenter_id": [null],
                "timestamp": [null],
              },
          },
        ],
    },
}