简介
search template 搜索模板,可以将一些常用的搜索模板化,每次要执行这个搜索的时候,就直接调用模板,然后传入参数就好了
入门
先写一个简单的模板1
2
3
4
5
6
7
8
9
10
11
12
13
14GET /blog_website/blogs/_search/template
{
"inline":{
"query":{
"match":{
"{{field}}" : "{{value}}"
}
}
},
"params": {
"field":"title",
"value":"博客"
}
}
inline 里面是模板,然后params里面传去参数里面是参数名
上面这个请求es会翻译成这样的1
2
3
4
5
6
7
8GET /blog_website/blogs/_search
{
"query": {
"match" : {
"title" : "博客"
}
}
}
toJson
1 | GET /blog_website/blogs/_search/template |
把对象类型的参数放进去
经过es转换后,会转为1
2
3
4
5
6
7
8GET /blog_website/blogs/_search
{
"query": {
"match" : {
"title" : "博客"
}
}
}
join
1 | GET /blog_website/blogs/_search/template |
将下面参数传入的数组用delimiter设置的值拼接起来
es转换后:1
2
3
4
5
6
7
8GET /blog_website/blogs/_search
{
"query": {
"match" : {
"title" : "博客 网站"
}
}
}
default value
加一个数据用来测试1
2
3
4
5
6POST /blog_website/blogs/1/_update
{
"doc": {
"views": 5
}
}
模板:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17GET blog_website/blogs/_search/template
{
"inline":{
"query":{
"range":{
"views":{
"gte":"{{start}}",
"lte":"{{end}}{{^end}}20{{/end}}"
}
}
}
},
"params": {
"start":1,
"end":10
}
}
就是,有传值的话就按传的值去搜索,不传值的话,就是按照设置的默认值来搜索,比如上面模板中的end,如果不传值的话就是默认的20
es转换后:1
2
3
4
5
6
7
8
9
10
11GET /blog_website/blogs/_search
{
"query": {
"range": {
"views": {
"gte": 1,
"lte": 20
}
}
}
}
conditional
这里要去es的config/scripts目录下,预先把模板保存下来,这里文件名是conditonal,后缀名是.mustache
文件内容:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26{
"query": {
"bool": {
"must": {
"match": {
"line": "{{text}}"
}
},
"filter": {
{{#line_no}}
"range": {
"line_no": {
{{#start}}
"gte": "{{start}}"
{{#end}},{{/end}}
{{/start}}
{{#end}}
"lte": "{{end}}"
{{/end}}
}
}
{{/line_no}}
}
}
}
}
添加一条数据做测试:1
2
3
4
5PUT my_index/my_type/1
{
"line": "我的博客",
"line_no": 5
}
模板保存好了之后,去调用这个模板,传参,查询1
2
3
4
5
6
7
8
9
10GET /my_index/my_type/_search/template
{
"file": "conditional",
"params": {
"text": "博客",
"line_no": true,
"start": 1,
"end": 10
}
}
返回值:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25{
"took": 3,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.5753642,
"hits": [
{
"_index": "my_index",
"_type": "my_type",
"_id": "1",
"_score": 0.5753642,
"_source": {
"line": "我的博客",
"line_no": 5
}
}
]
}
}
模板里有一个参数是list_no,然后底下调用的时候传了true,就会走filter里面的range,就跟mybaits里面的判空,然后加一个搜索条件是类似的
模板保存
以上所有的模板,都可以保存到config/scripts目录下,模板文件必须是.mustache结尾的,然后调用的时候就是上面那样调用就好了
使用场景:可能在项目开发过程中,有很多人都会执行一些类似的操作,这时候就可以封装成模板,然后每个人使用的时候传入参数就可以了