出自 图灵学院 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
