ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

es5.4.0查询模板鸡肋学习

2021-08-02 23:01:58  阅读:203  来源: 互联网

标签:information search name people 鸡肋 es5.4 模板 template


文章目录

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

{
  "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"
      }
    }
  }
}

标签:information,search,name,people,鸡肋,es5.4,模板,template
来源: https://blog.csdn.net/xiaoyoupei/article/details/119335940

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有