일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- jQuery
- 쿼리
- 자바
- elasticsearch
- JavaScript
- 엑셀
- Excel
- 자바스크립트
- JSP
- Eclipse
- 도커
- 데이터베이스
- Java
- 에러
- docker
- CSS
- tomcat
- db
- HTML
- spring 오류
- 인텔리제이
- java 오류
- 이클립스
- 엘라스틱서치
- spring form
- 한글 깨짐
- 이클립스 설정
- eclipse 설정
- 형변환
- 자바 리스트
Archives
- Today
- Total
개발노트
Script 본문
반응형
Elasticsearch에서 script는 쿼리나 집계(Aggregation) 실행 시 커스텀 로직을 적용하기 위해 사용하는 기능입니다.
스크립트를 사용하면 데이터 검색, 필터링, 집계, 업데이트 등 다양한 작업을 더 동적으로 처리할 수 있습니다.
[주요 기능 및 용도]
- 필드 값 계산
- 예: 특정 필드 값을 조합하거나 계산하여 검색 조건에 사용.
- _source에서 데이터를 불러와 계산 가능.
- 조건부 로직 적용
- 특정 조건에 따라 문서를 필터링하거나 결과를 조정.
- 예: 특정 필드 값이 특정 범위 안에 있는 문서만 검색.
- 커스텀 점수 계산 (Scoring)
- 기본 점수 계산 로직을 덮어쓰고 커스텀 점수를 적용.
- 예: 특정 키워드가 포함된 문서에 높은 점수를 부여.
- 집계 결과 조정
- 집계 도중 데이터를 가공하거나 커스텀 계산 수행.
- 예: 평균, 합계 등의 집계 결과에 추가 연산 적용.
- 데이터 업데이트
- Update API를 사용하여 문서의 특정 필드를 동적으로 수정.
[Script의 종류]
Elasticsearch에서는 다양한 방식으로 스크립트를 작성할 수 있습니다.
- Painless (기본)
- Elasticsearch에서 기본으로 제공하는 경량 스크립트 언어.
- 성능과 안전성을 고려하여 설계됨.
{ "script": { "source": "doc['price'].value * params.factor", "params": { "factor": 1.2 } } }
- Stored Script
- 클러스터에 사전에 저장된 스크립트를 호출하여 실행.
- 반복적으로 사용해야 하거나 복잡한 로직에 적합.
- Inline Script
- 스크립트를 쿼리 안에 직접 작성.
- 간단한 계산이나 로직에 유용.
- Native Script (Deprecated)
- Java로 작성된 커스텀 스크립트. 현재는 잘 사용되지 않음.
[예시]
1) 전체 문서 검색 및 커스텀 점수 계산
POST /인덱스명/_search
POST /my_index/_search
{
"query" : {
"function_score": {
"query": {
"match_all": {}
},
"script_score": {
"script":{
"source": "doc['price'].value * _score"
}
}
}
}
}
- 모든 문서를 검색 (match_all)합니다.
- 각 문서의 _score(기본 점수)에 price 필드 값을 곱하여 커스텀 점수를 계산합니다.
2) 집계: 커스텀 평균 계산
POST /인덱스명/_search
POST /my_index/_search
{
"size" : 0,
"aggs": {
"custom_avg": {
"avg": {
"script": {
"source": "doc['price'].value * params.vat_rate",
"params": {
"vat_rate":1.2
}
}
}
}
}
}
- 검색 결과는 반환하지 않고(size: 0), 집계 결과만 반환합니다.
- price 필드 값에 vat_rate(부가세율 1.2)를 곱한 값을 기준으로 평균을 계산합니다.
3) 스크립트 등록
POST /_scripts/저장할 이름
POST /_scripts/calculate-vat
{
"script":{
"lang" : "painless",
"source": "doc['price'].value * params.vat_rate"
}
}
- 서버에 calculate-vat라는 ID로 Painless 스크립트를 저장합니다.
- 이 스크립트는 price 값에 vat_rate를 곱하는 로직을 수행합니다.
- 등록된 스크립트는 다른 쿼리에서 재사용 가능합니다.
4) 등록된 스크립트를 활용한 집계
POST /인덱스명/_search
POST /my_index/_search
{
"size": 0,
"aggs": {
"custom_avg": {
"avg": {
"script": {
"id":"calculate-vat",
"params": {
"vat_rate":1.2
}
}
}
}
}
}
- 앞서 등록한 calculate-vat 스크립트를 사용하여 집계를 수행합니다.
- price 값에 vat_rate를 곱한 결과의 평균을 계산합니다.
- 등록된 스크립트를 활용하므로 스크립트를 재작성할 필요가 없습니다.
반응형
'Programming > ElasticSearch' 카테고리의 다른 글
Upsert (0) | 2024.11.21 |
---|---|
script 와 doc 차이 (0) | 2024.11.20 |
대시보드에서 elasticsearch 명령어 확인 (0) | 2024.11.19 |
Elastic Stack ( ELK Stack ) (0) | 2024.11.13 |
[ElasticSearch] text와 keyword 타입 (0) | 2024.08.06 |