본문 바로가기
Programming/Elasticsearch

[Elasticsearch] 검색 템플릿이란? (Search Template)

by 가론노미 2023. 3. 26.

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