Elasticsearch 검색 템플릿(Searh Template) 기능을 사용하면 편리하고 간단하게 쿼리 호출이 가능하다.
장점
- 여러 인덱스에서 사용하는 동일한 쿼리가 있는 경우 템플릿을 통해 편리하게 사용 가능
- 코드 수정 없이도 부스팅을 하거나 쿼리의 간단한 수정 가능
검색 템플릿 생성
PUT _scripts/my-search-template
{
"script": {
"lang": "mustache",
"source": {
"query": {
"match": {
"message": "{{query_string}}"
}
},
"from": "{{from}}",
"size": "{{size}}"
}
}
}
파라미터 기본값 정의
아래 구문처럼 작성하면 파라미터 기본값 정의도 가능하다.
{{my-var}}{{^my-var}}default value{{/my-var}}
예를 들어, size 기본값을 10으로 설정하려면 아래와 같이 작성해주면 된다.
PUT _scripts/my-search-template
{
"script": {
"lang": "mustache",
"source": {
"query": {
"match": {
"message": "{{query_string}}"
}
},
"from": "{{from}}",
"size": "{{size}}{{^size}}10{{/size}}"
}
}
}
파라미터 배열 사용
파라미터로 배열을 사용하고 싶은 경우에는 {{join}} 함수를 사용할 수 있다.
POST _render/template
{
"source": {
"query": {
"match": {
"user.group.emails": "{{#join}}emails{{/join}}"
}
}
},
"params": {
"emails": [ "user1@example.com", "user_one@example.com" ]
}
}
배열 값이 자동으로 쉼표로 구분된 문자열로 변환되어 들어가진다.
{
"template_output": {
"query": {
"match": {
"user.group.emails": "user1@example.com,user_one@example.com"
}
}
}
}
검색 템플릿 조회
GET _scripts/my-search-template
검색 템플릿 삭제
DELETE _scripts/my-search-template
검색 템플릿 사용하여 쿼리 실행
GET my-index/_search/template
{
"id": "my-search-template",
"params": {
"query_string": "hello world",
"from": 0,
"size": 10
}
}
검색 템플릿 테스트
검색 템플릿을 사용한 쿼리 결과값이 어떻게 확인하기 위해서는 render 를 사용하면 된다.
이미 등록한 검색 템플릿을 테스트하는 경우 아래와 같이 호출할 수 있다.
POST _render/template
{
"id": "my-search-template",
"params": {
"query_string": "hello world",
"from": 20,
"size": 10
}
}
템플릿을 인라인으로 바로 작성하여 확인도 가능하다.
POST _render/template
{
"source": {
"query": {
"match": {
"message": "{{query_string}}"
}
},
"from": "{{from}}",
"size": "{{size}}"
},
"params": {
"query_string": "hello world",
"from": 20,
"size": 10
}
}
<참조>
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html
'Programming > Elasticsearch' 카테고리의 다른 글
[Elasticsearch] Query DSL 주요 쿼리 정리 (0) | 2023.05.05 |
---|