Search Template
✅ Search Template 주요 이점
- 재사용성: 동일한 또는 유사한 쿼리를 여러 곳에서 사용해야 할 때, 검색 템플릿을 작성하여 중복 코드를 피할 수 있습니다.
- 동적 쿼리: 검색 템플릿은 변수를 사용하여 동적으로 쿼리를 생성할 수 있습니다. 이는 실행 시에 변수를 전달하여 쿼리를 다양하게 조정할 수 있음을 의미합니다.
- 검색 로직 분리: 복잡한 검색 로직을 템플릿으로 분리함으로써 코드를 더 깔끔하게 유지할 수 있습니다.
✅ template 저장 방법
<< request >>
- _script 를 endpoint 로 주고 그 옆에 정하고자 하는 template 이름을 작성
- {{my_filed}} 나 {{my_value}} 는 변수값으로 실제 값으로 대체되어 검색하게 됨
PUT _script/{search_templete이름}
{
"script" : {
"lang" : "mustache",
"source" : {
"query" : {
"match" : {
"{{my_field}}" : "{{my_value}}"
...
✅ template 실행 방법
<< request >>
- _search/template 를 endpoint 로 설정
- id에는 사용할 template 명을 적어줌
- {{my_filed}} 나 {{my_value}} 에 원하는 변수값을 정의함
GET blogs/_search/template
{
"id" : "위에서 정한 template 명",
"param" : {
"my_field" : "title",
"my_value" : "shay banon"
}
}
✅ lab 3.3 EXAM PREP 정리
Q. weekly_blogs 라는 search template 생성 후 start_date라는 param으로 일주일 기간을 검색하는 스크립트 작성하기
PUT _scripts/weekly_blogs
{
"script" : {
"lang": "mustache",
"source": {
"query" : {
"bool" : {
"filter" : [
{
"range" : {
"publish_date" : {
"gte" : "{{start_date}}",
"lt" : "{{start_date}}||+1w"
...
❌ [나의 틀린 부분]
- "lang" 필드 빼먹음... (필수로 적어주자, 사용할 언어 정의해주는 것!)
- filter 는 배열로 넣어주도록! (bool 쿼리는 인자 사용할 때 다른 쿼리들을 배열로 넣는 방식으로 동작됨)
- gte/lt 사용하기
- 1w 앞에 || 기호 넣어주기 (날짜 수학 표현식을 적용하는 역할을 함)
Q. 2021년 4월 1일 주의 상위 5개 블로그를 반환하는 쿼리를 작성하여 검색 템플릿이 작동하는지 확인하기
GET blogs_fixed2/_search/template
{
"id" : "weekly_blogs",
"params" : {
"start_date" : "2021-04-01"
}
}
➡️ start_date에 원하는 날짜를 넣으면 기존에 설정해놓은 template 적용되어
한 주 결과값을 가져오게됨!
highlighting
✅ 실행 방법
- match 하고자하는 쿼리를 "match" 안에 작성 ( e.g 제목이 security인 쿼리에 하이라이팅 처리할 때)
- highlight 부분에 적용하고자 하는 field 적어주고, pre_tags/post_tags 적어줌
GET blogs_fixed2/_search
{
"query": {
"match": {
"title": "security"
}
},
"highlight": {
"fields": {
"title": {}
},
"pre_tags": [
"<strong>"
],
"post_tags": [
"</strong>"
]
}
}
❌ [나의 틀린 부분]
- pre_tags 와 post_tags 는 배열안에 담도록!
'DataBase' 카테고리의 다른 글
[Elastic Search] Scripting & Runtime Fields (0) | 2024.01.06 |
---|---|
[Elastic Search] Processor / Changing Data (0) | 2024.01.05 |
[Elastic Search] Syntax 사용 (0) | 2024.01.04 |
[Elastic Search] Elastic Stack 아키텍쳐 / ELK 란? (0) | 2023.12.27 |
[SQL] JOIN문, JOIN 종류(Inner,Natural,Outer,Cross) (0) | 2022.08.20 |
댓글