[Kibana] visualize 에서 scripted field 사용하기
Elastic/Kibana 2019. 4. 25. 14:14예전에는 이 기능이 없어서 code 로 되어 있던 field 에 대해서 가독성 확보가 어려웠는데요.
나온지 한 참 되었는데 혹시 필요 하신 분들이 있을 수도 있어서 기록해 봅니다.
사실은 제가 기억력이 좋지 않아서 복습 차원에 정리 해 보는 내용입니다.
공식 문서)
https://www.elastic.co/guide/en/kibana/current/scripted-fields.html
보통 visualize 에서도 "Advanced" 클릭 하시면 JSON Input 영역에 필요한 script 를 넣을 수 있습니다.
Terms aggregation 을 기본 예로 들면,
{
"aggs": {
"1": {
"terms": {
"field": "user",
"size": 100000,
"order": {
"_count": "desc"
}
}
...중략...
}
Kibana 에서 이 정도 작성이 가능 합니다.
여기서 "min_doc_count" 같은 값을 설정 하고 싶을 경우 위에 이야기한 "Advanced" 를 클릭해서 값을 넣으시면 아래와 같이 등록이 됩니다.
Advacned JSON Input)
{
"min_doc_count":3
}
최종 Request string)
{
"aggs": {
"1": {
"terms": {
"field": "user",
"size": 100000,
"order": {
"_count": "desc"
},
"min_doc_count":3
}
...중략...
}
그럼 scripted field 추가를 해보겠습니다.
공식 문서에 자세히 나와 있기 때문에 별도 화면 캡쳐 등의 설명은 하지 않겠습니다.
내용만 발췌 합니다.
Creating a Scripted Field
To create a scripted field:
-
Go to Management > Kibana > Index Patterns
-
Select the index pattern you want to add a scripted field to.
-
Go to the pattern’s Scripted fields tab.
-
Click Add scripted field.
-
Enter a name for the scripted field.
-
Enter the expression that you want to use to compute a value on the fly from your index data.
-
Click Create field.
이렇게 생성 완료 후 Visualize 에서 Terms aggs 작성 하시면서 Field 쪽에 작성 하신 scripted field 를 넣어 주시면 됩니다.
단, 생성할 때 선택한 index 로 visualize 를 만드셔야지 scripted field 가 노출 됩니다.
아래는 제가 사용한 scripted field 정보 입니다.
Name : code_ko
Lang : painless
Script :
if (doc['code'].value == '1') { '카테고리1' }
else if (doc['code'].value == '2') {'카테고리2'}
else if (doc['code'].value == '3') {'카테고리3'}
else if (doc['code'].value == '4') {'카테고리4'}
else if (doc['code'].value == '5') {'카테고리5'}
else if (doc['code'].value == '6') {'카테고리6'}
else if (doc['code'].value == '7') {'카테고리7'}
else if (doc['code'].value == '8') {'카테고리8'}
else if (doc['code'].value == '9') {'카테고리9'}
else if (doc['code'].value == '10') {'카테고리10'}
else if (doc['code'].value == '11') {'카테고리11'}
else if (doc['code'].value == '12') {'카테고리12'}
- pseudocode 로 변경해서 기록 했습니다.