es5.4.0查询模板鸡肋学习

search template

1、前言(有用的前言)

学习es的查询模板必须得先知道Mustache(胡子)语法

{{data}}
{{#data}} {{/data}}
{{^data}} {{/data}}
{{.}}
{{<partials}}
{{{data}}}
{{!comments}}

2、简单存储

①、在集群状态下注册查询模板

写查询模板

PUT _search/template/people_search_single_test
{
 "template": {
    "query":{
      "match":{
        "name":"{{name}}"
      }
    }
  }
}

查数据用查询模板(前提的有数据),注意关键词id

GET family_index/people/_search/template
{
  "id":"people_search_single_test",
  "params":{
    "name":"li yan"
  }
}

②、写文件来查

在es路径下config/scripts中,创建文件,后缀名必须为.mustache,例如:people_search_single_test.mustache内容如下

写文件people_search_single_test.mustache

{
  "query": {
    "bool": {
      "must": {
        "match": {
          "name": "{{name}}"
        }
      }
    }
  }
}

查数据

GET family_index/people/_search/template
{
  "file":"people_search_single_test",
  "params":{
    "name":"li yan"
  }
}

3、内联查询

之前看官网介绍对查询模板很疑惑,会使用一种内联查询的方式,觉得很鸡肋,如下:毫无意义(模板就是为了简便,这样写就没有意义了)

GET family_index/people/_search/template
{
"template": {
   "query":{
     "match":{
       "name":"{{name}}"
     }
   }
 },
 "params":{
   "name":"li yan"
 }
}

4、验算

如果担心写的查询模板会有错误,那可以使用_render,带个参数进去验证

#写
PUT _search/template/people_search_single_test
{
"template": {
   "query":{
     "match":{
       "name":"{{name}}"
     }
   }
 }
}


#查
GET _render/template/people_search_single_test
{
 "params": {
   "name": "li yan"
 }
}


#-------结果----------
{
 "template_output": {
   "query": {
     "match": {
       "name": "li yan"
     }
   }
 }
}

5、Mustache模板语法

{{parameter}}:传参

{{#parameter}}{{/parameter}}:若模板名称对应的参数不存在或者返回为false,那么此对标签包裹的内容将不显示

{{^parameter}}{{/parameter}}:和上面一个相反,若模板名称对应的参数不存在或者返回为false,那么此对标签包裹的内容将显示

{{!我爱上班}}:注释

{{#toJson}}{{/toJson}}:转为JSON,一般针对对象的内容

{{#join}}{{/join}}:拼接,默认,

{{#join delimiter='||'}}{{/join delimiter='||'}}:自定义拼接符号

{{#url}}{{/url}}:对URL转码

6、案例

文件名为:people_search_complex_test.mustache,用好{{#parameter}}{{/parameter}}{{^parameter}}{{/parameter}}相当于if else

#--数据格式
{
 "id":2,
 "name":"li yan",
 "sex":"woman",
 "information":[
   {"height":155.2},
   {"weight":45.0}
   ]
}
{
  "query": {
    "bool": {
      "must": {
        "match": {
          "name": "{{name}}"
        }
      },
    
        "filter": {
          {{#information}}
          "range": {
            "information.height": {
              {{#start}}
              "gte": "{{start}}"
              {{#end}},{{/end}}
              {{/start}}
              {{#end}}
              "lte": "{{end}}"
              {{/end}}
            }
          }
          {{/information}}
          {{^information}}
          "gte":"160",
          "lte":"190"
          {{/information}}
        }
  }
  },
  "from": "{{from}}",
  "size": "{{size}}",
  "aggs": {
    "people_height_avg": {
      "avg": {
        "field": "information.height"
      }
    }
  },
  "sort": {
    "information.height": {
      "order": "desc"
    }
  }
}
#----
GET family_index/people/_search/template
{
  "file": "people_search_complex_test",
  "params": {
    "name": "xiao li",
    "from": "0",
    "size": "2",
    "information":{
      "start":150,
      "end":170
    }
    
  }
}
#--验算结果--
{
  "template_output": {
    "query": {
      "bool": {
        "must": {
          "match": {
            "name": "li yan"
          }
        },
        "filter": {
          "range": {
            "information.height": {
              "gte": "150",
              "lte": "170"
            }
          }
        }
      }
    },
    "from": "0",
    "size": "2",
    "aggs": {
      "people_height_avg": {
        "avg": {
          "field": "information.height"
        }
      }
    },
    "sort": {
      "information.height": {
        "order": "desc"
      }
    }
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

友培

数据皆开源!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值