前言
搜索模板,search template,高级功能,就可以将我们的一些搜索进行模板化,然后的话,每次执行这个搜索,就直接调用模板,给传入一些参数就可以了
1、search template入门
search template:"{{field}}" : "{{value}}" ,设置search template
GET /blog_website/blogs/_search/template
{
"inline" : {
"query": {
"match" : {
"{<!-- -->{field}}" : "{<!-- -->{value}}"
}
}
},
"params" : {
"field" : "title",
"value" : "博客"
}
}
相当于
GET /blog_website/blogs/_search
{
"query": {
"match" : {
"title" : "博客"
}
}
}
2、toJson
以json格式传入,
设置
search template
GET /blog_website/blogs/_search/template
{
"inline": "{\"query\": {\"match\": {<!-- -->{#toJson}}matchCondition{<!-- -->{/toJson}}}}",
"params": {
"matchCondition": {
"title": "博客"
}
}
}
相当于
GET /blog_website/blogs/_search
{
"query": {
"match" : {
"title" : "博客"
}
}
}
3、join
一个field多值查询,join关联,
设置
search template
GET /blog_website/blogs/_search/template
{
"inline": {
"query": {
"match": {
"title": "{<!-- -->{#join delimiter=' '}}titles{<!-- -->{/join delimiter=' '}}"
}
}
},
"params": {
"titles": ["博客", "网站"]
}
}
相当于
GET /blog_website/blogs/_search
{
"query": {
"match" : {
"title" : "博客 网站"
}
}
}
4、default value
初始化search template数据,params未传values时候,使用初始化的默认数据查询初始化搜索数据
POST /blog_website/blogs/1/_update
{
"doc": {
"views": 5
}
}
设置search template
GET /blog_website/blogs/_search/template
{
"inline": {
"query": {
"range": {
"views": {
"gte": "{<!-- -->{start}}",
"lte": "{<!-- -->{end}}{<!-- -->{^end}}20{<!-- -->{/end}}"
}
}
}
},
"params": {
"start": 1,
"end": 10
}
}
相当于
GET /blog_website/blogs/_search
{
"query": {
"range": {
"views": {
"gte": 1,
"lte": 10
}
}
}
}
设置
search template,使用default value
GET /blog_website/blogs/_search/template
{
"inline": {
"query": {
"range": {
"views": {
"gte": "{<!-- -->{start}}",
"lte": "{<!-- -->{end}}{<!-- -->{^end}}20{<!-- -->{/end}}"
}
}
}
},
"params": {
"start": 1
}
}
相当于
GET /blog_website/blogs/_search
{
"query": {
"range": {
"views": {
"gte": 1,
"lte": 20
}
}
}
}
5、conditional
条件查询模版,
设置
search template
{
"query": {
"bool": {
"must": {
"match": {
"line": "{<!-- -->{text}}"
}
},
"filter": {
{<!-- -->{#line_no}}
"range": {
"line_no": {
{<!-- -->{#start}}
"gte": "{<!-- -->{start}}"
{<!-- -->{#end}},{<!-- -->{/end}}
{<!-- -->{/start}}
{<!-- -->{#end}}
"lte": "{<!-- -->{end}}"
{<!-- -->{/end}}
}
}
{<!-- -->{/line_no}}
}
}
}
}
相当于
GET /my_index/my_type/_search
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "my_index",
"_type": "my_type",
"_id": "1",
"_score": 1,
"_source": {
"line": "我的博客",
"line_no": 5
}
}
]
}
}
6、保存search template
es的config/scripts目录下,预先保存这个复杂的模板,后缀名是.mustache,文件名是conditonal
在进行 条件 search template 查询
GET /my_index/my_type/_search/template
{
"file": "conditional",
"params": {
"text": "博客",
"line_no": true,
"start": 1,
"end": 10
}
}
提供一个思路
比如说,一般在大型的团队中,可能不同的人,都会想要执行一些类似的搜索操作
这个时候,有一些负责底层运维的一些同学,就可以基于search template,封装一些模板出来,然后是放在各个es进程的scripts目录下的
其他的团队,其实就不用各个团队自己反复手写复杂的通用的查询语句了,直接调用某个搜索模板,传入一些参数就好了
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8