내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Elasticsearch(ES)의 일상적인 개발 및 운영에서 우리는 유사한 쿼리를 자주 실행해야 하는 시나리오를 자주 접하게 됩니다. 이러한 쿼리에는 비즈니스 논리의 복잡성으로 인해 여러 필드, 필터 조건 및 집계 분석이 포함될 수 있습니다. 이러한 작업을 최적화하고 개발 효율성을 향상시키기 위해 Elasticsearch는 검색 템플릿 기능을 제공합니다. 이 문서에서는 Elasticsearch의 검색 템플릿을 사용하여 쿼리를 재사용하고 공유하는 방법을 설명합니다.
일상적인 개발에서는 대부분의 쿼리가 상대적으로 간단할 수 있지만 일부 복잡한 비즈니스 시나리오(예: 금융, 의학 등)에서는 검색 시 수십 개의 필드를 전달하거나 반환해야 하며 복잡한 필터링 조건 및 집계 분석이 필요할 수 있습니다. . 이 시점에서 각 쿼리를 수동으로 작성하는 것은 비효율적일 뿐만 아니라 오류가 발생하기 쉽습니다. 검색 템플릿은 MySQL의 저장 프로시저 또는 함수와 유사하며 한 번만 정의하면 되며 나중에 템플릿을 호출하고 매개변수를 전달하여 검색 기능을 완료할 수 있으므로 개발 효율성과 쿼리 유연성이 크게 향상됩니다.
검색 템플릿의 기본 형태는 쿼리 조건을 포함하는 JSON 개체를 정의하고 전달하는 것입니다._search/template
API 호출. 예를 들어:
GET /index_name/_search/template
{
"source": {
"query": {
"match": {
"remark": "{{kw}}"
}
},
"size": "{{size}}"
},
"params": {
"kw": "真正的数值",
"size": 100
}
}
이 예에서는{{kw}}
그리고{{size}}
템플릿의 변수이며 전달되었습니다.params
객체는 특정 값을 전달합니다.
toJSON
형태가 특징이다source
문자열을 사용하여 정의하고 이스케이프 문자가 필요합니다. 예를 들어:
GET cars/_search/template
{
"source": "{ "query": { "match": {{#toJson}}parameter{{/toJson}} }}",
"params": {
"parameter": {
"remark": "真正的数值"
}
}
}
사용join
이 메서드는 배열의 요소를 쿼리 조건에 대한 문자열로 연결할 수 있습니다. 예를 들어:
GET index_name/_search/template
{
"source": {
"query": {
"match": {
"remark": "{{#join delimiter=' '}}kw{{/join delimiter=' '}}"
}
}
},
"params": {
"kw": ["大众", "标致", "奔驰", "宝马"]
}
}
템플릿에서 매개변수에 대한 기본값을 설정할 수 있습니다. 호출 시 매개변수가 전달되지 않으면 기본값이 사용됩니다. 예를 들어:
GET index_name/_search/template
{
"source": {
"query": {
"range": {
"price": {
"gte": "{{start}}",
"lte": "{{end}}{{^end}}200000{{/end}}"
}
}
}
},
"params": {
"start": 100000
}
}
템플릿을 재사용하기 위해 Elasticsearch에 저장할 수 있습니다. 템플릿 이름을 지정해 주면 나중에 반복적으로 호출할 때 편리합니다. 예를 들어:
POST _scripts/my_test_template
{
"script": {
"lang": "mustache",
"source": {
"query": {
"match": {
"field_name": "{{kw}}"
}
}
}
}
}
템플릿을 호출할 때 다음을 전달합니다.id
특정 템플릿을 지정하고 해당 매개변수를 전달합니다. 예를 들어:
GET index_name/_search/template
{
"id": "my_test_template",
"params": {
"kw": "自定义template的参数值"
}
}
정의된 템플릿 정보는 GET 요청을 통해 쿼리할 수 있습니다. 예:
GET _scripts/my_test_template
정의된 템플릿을 삭제해야 하는 경우 DELETE 요청을 사용할 수 있습니다. 예를 들면 다음과 같습니다.
DELETE _scripts/my_test_template
엘라스틱서치가 제공하는_render/template
템플릿의 유효성을 검사하는 API입니다.