0
点赞
收藏
分享

微信扫一扫

ElasticSearch的 search template搜索模板

出自 图灵学院 ElasticSearch课程, 我自己学完了,整理了一下,然后给老师说的话,记录了一下,发了个博客

概述

搜索模板,search template,高级功能,就可以将我们的一些搜索进行模板化,然后的话,每次执行这个搜索,就直接调用模板,给传入一些参数就可以了

search template就类似MySQL的存储过程和存储函数

MySQL的存储过程和存储函数就直接放到MySQL里面的,执行效率比较高,比较复杂的逻辑可以直接封装好,然后程序员直接快速的调用就可以了.

search template搜索模板在公司不一定能用得到.

但是一般高阶专门搞ElasticSearch的开发人员可能就会用到了.

template入门案例

简单定义参数并传递

source和params 是关键字,不能随便改的.

GET /cars/_search/template
{
"source": {
"query": {
"match": {
"remark": "{{kw}}"
}
},
"size": "{{size}}"
},
"params": {
"kw": "大众",
"size": 2
}
}

toJson方式传递参数

GET cars/_search/template
{
"source": """{ "query": { "match": {{#toJson}}parameter{{/toJson}} }}""",
"params": {
"parameter": {
"remark": "大众"
}
}
}

#toJson不要随便改,是一个关键字

join方式传递参数

GET cars/_search/template
{
"source": {
"query": {
"match": {
"remark": "{{#join delimiter=' '}}kw{{/join delimiter=' '}}"
}
}
},
"params": {
"kw": [
"大众",
"标致"
]
}
}

上面的dsl的意思是
remark:“大众 标致”


默认值定义:

下面的 {{^end}}200000{{/end}}" 语法就是定义了一个默认值

GET cars/_search/template
{
"source": {
"query": {
"range": {
"price": {
"gte": "{{start}}",
"lte": "{{end}}{{^end}}200000{{/end}}"
}
}
}
},
"params": {
"start": 100000,
"end" : 200000
}
}
GET cars/_search/template
{
"source": {
"query": {
"range": {
"price": {
"gte": "{{start}}",
"lte": "{{end}}{{^end}}200000{{/end}}"
}
}
}
},
"params": {
"start": 100000
}
}

“lte”: “{{end}}{{^end}}200000{{/end}}” 中{{^end}}200000{{/end}}的意思是声明默认值

上面两个dsl语句效果是一样的.

记录template实现重复调用

可以使用Mustache语言作为搜索请求的预处理,它提供了模板,然后通过键值对来替换模板中的变量。把脚本存储在本地磁盘中,默认的位置为:elasticsearch\config\scripts,通过引用脚本名称进行使用

1 保存template到ES

test 是模板名字

POST _scripts/test
{
"script": {
"lang": "mustache",
"source": {
"query": {
"match": {
"remark": "{{kw}}"
}
}
}
}
}

2 调用template执行搜索

“id”: “test”, 意思是调用名字为test的模板
params就是调用模板的值

GET cars/_search/template
{
"id": "test",
"params": {
"kw": "大众"
}
}

3 查询已定义的template

GET _scripts/test

结果:

{
"_id" : "test",
"found" : true,
"script" : {
"lang" : "mustache",
"source" : """{"query":{"match":{"remark":"{{kw}}"}}}""",
"options" : {
"content_type" : "application/json; charset=UTF-8"
}
}
}

4 删除已定义的template

DELETE _scripts/test


举报

相关推荐

0 条评论