[Elastic][Elasticsearch] runtime_mappings
Updated:
개요
- https://www.elastic.co/guide/en/elasticsearch/reference/current/runtime-search-request.html
- 검색 요청 시 runtime fields 정의
- 검색 요청에 runtime_mappings를 지정하여 쿼리의 일부로만 존재하는 runtime fields를 생성
- mapping에 runtime fields를 추가하는 것처럼 스크립트를 runtime_mappings 섹션의 일부로 지정
예제
- 데이터
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": { "match_all": {} }, "_source": [ "fields" ], "fields": [ "cpu_sum", "timestamp" ], "runtime_mappings": { "cpu_sum": { "type": "double", "script": "double sum = 0; for (item in params._source.resource) {sum += item.cpu;} emit(sum);" }, "timestamp": { "type": "keyword", "script": "emit(doc['@timestamp'].value.toString());" } } }
- 응답
{ "took" : 1, "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" : "xGa2aYABFxYHVJl737Jm", "_score" : 1.0, "_source" : { }, "fields" : { "cpu_sum" : [ 6.0 ], "timestamp" : [ "2022-05-01T07:00:00.000Z" ] } } ] } }