E.S에서 runtime field란, 임시의 필드를 생성해주는 것이다. 이 런타임 필드는 인덱스의 크기를 늘리지 않는다. 그래서 인덱싱을 했을 때, mapping을 잘못해주었을 경우,혹은 하나의 필드를 다른 타입으로도 활용하고 싶을 때 사용한다. 또한 런타임 필드를 이용해서 각 필드의 value를 활용해 연산 또한 할 수 있다 ( doc['fieldname'].value , emit).
런타임 필드를 맵핑할 때 , 기존에 존재하는 필드의 이름과 동일하게 한다면 런타임 필드는 숨겨진다.
*스크립트를 짰을 때, 그 오퍼레이션에 맞는 데이터 타입의 필드를 사용해야한다.*
1. 서치로 바로 runtime_mappings을 생성
GET ds_admin_minsu_test/_search
{
"runtime_mappings": {
"calcul": {
"type": "double",
"script": {
"source":
"""
if (doc['weeight'].value == (2222))
{emit(2 * params._source['weeight']);}
else{emit(2.9 * params._source['weeight']);}
"""
}
}
},
"query": {
"match": {
"field_name": "yum"
}
},
"fields": [
"calcul"
]
}
결과 값 :
정상적으로 작동 (원래는 'weeight'의 필드 값이 2222 (type=long) 이였다.
2. 인덱스에 runtime Mapping을 넣은 다음, 그 내용을 검색
*runtime mapping은 일반 search 문에서는 검색되지 않으므로, 런타임 필드를 특정해서 검색해야지 나온다.
(마치 데이터를 ingest 하는 것 과 같다.)
PUT my-index-000001/_mapping
{
"runtime": {
"voltage_corrected": {
"type": "double",
"script": {
"source": """
emit(doc['voltage'].value * params['multiplier'])
""",
"params": {
"multiplier": 2
}
}
}
}
}
GET my-index-000001/_search
{
"fields": [
"voltage_corrected",
"node"
],
"size": 2
}
'Elastic Search' 카테고리의 다른 글
[ElasticSearch] master노드가 3개 이상 이여야 하는 이유 (1) | 2023.12.06 |
---|---|
ElasticSearch Analyzer 정리 (1) | 2023.11.28 |
Bool query (must 와 should) (0) | 2023.10.06 |
ES API 정리 (rare한 것 ) (0) | 2023.09.21 |
나에게 주어진 과제들 (0) | 2023.09.15 |