-
Notifications
You must be signed in to change notification settings - Fork 43
Scripted Field
Gee edited this page Nov 19, 2017
·
4 revisions
- Scripted Field는 시계열 연산을 제공하지 않는다.
- 잘못 사용할 경우 심각한 성능 저하의 원인이 될 수 있다.
-
text
data type에도 사용 가능하나, 전체 term을 JVM heap에 로드해야 하기에 memory와 CPU를 많이 소비한다.
- 사용법
- 종류
Management에서 Index Patterns 선택
- Name : Scripted Field 이름 설정
- Language : Painless 또는 (Lucene) Expression 선택
- Type : number, date, string, boolean 중 선택
- Format : 선택한 Type이 제공하는 Format 중 선택
- Script
- Scripted Field Script 작성
- 예)
doc['상품가격'].value * 1.05
- 적용 가능한 Field : Number
- Return Type : Number
- 기본 Syntax : doc['Field 이름'].value
- 사용 가능한 연산 Operator : +, -, *, /, % (나머지)
- 예시
-
doc['상품가격'].value + 10
,doc['상품가격'].value + doc['상품개수'].value
-
doc['상품가격'].value - 10
,doc['상품가격'].value - doc['상품개수'].value
-
doc['상품가격'].value * 10
,doc['상품가격'].value * doc['상품개수'].value
-
doc['상품가격'].value / 10
,doc['상품가격'].value / doc['상품개수'].value
-
doc['상품가격'].value % 10
,doc['상품가격'].value % doc['상품개수'].value
-
- 적용 가능한 Field : Date
- Return Type : Number
- Language : expressions
- 기본 Syntax
- 편의상
Field 이름
을 t라고 표시 -
doc['Field 이름'].date.year
와 `doc['t'].date.year는 같다
- 편의상
선택할 날짜 단위 | 예시 | 설명 | 범위 |
---|---|---|---|
year | doc['t'].date.year |
연도(year) 출력 | -292m - 292m |
month | doc['t'].date.monthOfYear |
몇 번째 달인지 출력 | 1-12 |
day | doc['t'].date.dayOfYear |
(해당 년의) 몇 번째 날인지 출력 | 1-365 |
day | doc['t'].date.dayOfMonth |
(해당 월의) 몇 번째 날인지 출력 | 1-31 |
day | doc['t'].date.dayOfWeek |
(해당 주의) 몇 번째 날인지 출력 | 1-7 |
hour | doc['t'].date.hourOfDay |
(하루 중) 몇 시간째인지 출력 | 0-23 |
minute | doc['t'].date.minuteOfDay |
(하루 중) 몇 분째인지 출력 | 0-1439 |
minute | doc['t'].date.minuteOfHour |
(한 시간 중) 몇 분째인지 출력 | 0-59 |
second | doc['t'].date.secondOfDay |
(하루 중) 몇 초째인지 출력 | 0-86399 |
- 적용 가능한 Field : Number/String
- Return Type : String
- Language : painless
- 예시
- 'Field 값은...' + doc['Field 이름'].value + '...입니다.'
- 적용 가능한 Field : Geo Point
- Language : expressions
- 기본 Syntax
- Geo Point의 위도 출력 :
doc['Field 이름'].lat
- Geo Point의 경도 출력 :
doc['Field 이름'].lon
- Geo Point의 위도 출력 :
- 응용
- 출발점~도착점 거리 계산 (km)
haversin(doc['출발점'].lat, doc['출발점'].lon, doc['도착점'].lat, doc['도착점'].lon)
-
Language : Painless
-
Syntax 예시
if (doc['고객나이'].value < 20) { return "10대" } if (doc['고객나이'].value < 30) { return "20대" } if (doc['고객나이'].value < 40) { return "30대" } if (doc['고객나이'].value < 50) { return "40대" } return "50대 이상"