《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.9.Search template(4) https://developer.aliyun.com/article/1230599
在配置模板时,我们将FlightNum的 value 配置为{{#toJson}}FlightNum{{/toJson}},即表示占位符FlightNum是一个对象。
在配置 params 时,我们将 FlightNum 的值设置为一个 JSON 对象{ "value":"9HY9SWR"}。
通过校验请求的返回,可以看到{{#toJson}}FlightNum{{/toJson}}被替换为对象{ "value":"9HY9SWR"}。
Mustache 还能在将变量套入模板时做一些处理,比如将数组变量组合成字符串放入模板、设置占位符的默认值,以及对 URL 转码。
示例如下:
GET _render/template { "source": { "query": { "term": { "FlightNum": "{{#join delimiter='||'}}FlightNums{{/join delimiter='||'}}", #1 "DestCountry":"{{DestCountry}}{{^DestCountry}}AU{{/DestCountry}}",#2 "Dest": "{{#url}}{{Dest}}{{/url}}"#3 } } }, "params": { "FlightNums": [ "9HY9SWR", "adf2c1" ], "Dest":"http://www.baidu.com" } } { "template_output" : { "query" : { "term" : { "FlightNum" : "9HY9SWR||adf2c1", # 4 "DestCountry" : "AU", #5 "Dest" : "http%3A%2F%2Fwww.baidu.com" # 6 } } } }
第一个模板使用{{#join delimiter='||'}}{{/join delimiter='||'}}设置了数组合并的分割字符为 "||",传参时FlightNums配置的为["9HY9SWR","adf2c1"],而生成的则是 #4 处的9HY9SWR||adf2c1。
第二个模板使用{{^DestCountry}}AU{{/DestCountry}}设置了占位符 DestCountry 的默认值为 AU,这样我们在params中并未配置 DestCountry 的值,但生成的 #5 处自动用 AU 替换了占位符。
第三个模板我们用{{#url}}{{/url}}声明了此处是一个 URL,需要进行转义,则在 #6 处配置的
http://www.baidu.com变为了http%3A%2F%2Fwww.baidu.com。
创作人简介:
骆潇龙,高级 Java 开发工程师,关注大数据技术领域。
博客:https://blog.gaiaproject.club/