ElasticSearch备考 -- Search template

一、题目

基础版

Create a search template for the above query, so that the template

(i) is named "with_response_and_tag",

(ii) has a parameter "with_min_response" to represent the lower bound of the `response` field,

(iii) has a parameter "with_max_response" to represent the upper bound of the `response` field,

(iv) has a parameter "with_tag" to represent a possible value of the `tags` field

Test the "with_response_and_tag" search template by setting the

parameters as follows:

(i) "with_min_response": 400,

(ii) "with_max_response": 500

(iii) "with_tag": "security"

进阶版

Update the "with_response_and_tag" search template, so that

(i) if the "with_max_response" parameter is not set, then don't set an upper bound to the `response` value, and

(ii) if the "with_tag" parameter is not set, then do not apply that filter at all

Test the "with_response_and_tag" search template by setting only the "with_min_response" parameter to 500

Test the "with_response_and_tag" search template by setting the parameters as follows:

(i) "with_min_response": 500,

(ii) "with_tag": "security"

二、思考

此题主要考察的是查询模版,这在日常工作中用到的比较少,需要注意写法和格式。如下是官方API提供一个模版样例,可以参照这个进行改造查询模版。此外创建模版后要注意验证模版,因为创建模版成功并不代表可以正常执行。

bash 复制代码
PUT _scripts/my-search-template
{
  "script": {
    "lang": "mustache",
    "source": {
      "query": {
        "match": {
          "message": "{{query_string}}"
        }
      },
      "from": "{{from}}",
      "size": "{{size}}"
    }
  }
}

三、解题

Step 1、【基础版】创建模版

bash 复制代码
PUT _scripts/with_response_and_tag
{
  "script": {
    "lang": "mustache",
    "source": {
      "query": {
        "range": {
          "response": {
            "gte": "{{with_max_response}}",
            "lte": "{{with_min_response}}"
          }
        },
        "match": {
          "tags": "{{with_tag}}"
        }
      }
    }
  }
}

Step 2、【基础版】验证模版

bash 复制代码
POST _render/template
{
  "id": "with_response_and_tag",
  "params": {
    "with_max_response": "500",
    "with_min_response": "400",
    "with_tag":"security"
  }
}

Step 3、【基础版】执行模版查询

bash 复制代码
GET my-index/_search/template
{
  "id": "with_response_and_tag",
  "params": {
    "with_max_response": "500",
    "with_min_response": "400",
    "with_tag":"security"
  }
}

Step 4、【进阶版】更新模版

这里有几点需要注意

  • source里可以使用三引号包裹,这样就可以不使用转移符
  • 如果参数中有使用条件,则使用 {{#condition}}content{{/condition}},外面不要引号
  • 如果是if else判断条件,则使用 {{#condition}}if content{{/condition}} {{^condition}}else content{{/condition}},外面不带引号
  • 默认值方式,{{my-var}}{{^my-var}}default value{{/my-var}},外面需要引号
bash 复制代码
PUT _scripts/with_response_and_tag
{
  "script": {
    "lang": "mustache",
    "source": """
      {
        "query": {
            "bool": {
              "filter": [
                {
                  "range": {
                    "response": {
                      "gte": "{{with_min_response}}"
                      {{#with_max_response}}
                      ,"lte": "{{with_max_response}}"
                      {{/with_max_response}}
                    }
                  }
                }, 
                {
                  {{#with_tag}}
                  "match": {
                    "tags":"{{with_tag}}"
                  }  
                  {{/with_tag}}
                }
            ]
          }
        }
      }
    """
  }
}

四、总结

  • 查询模版,这在日常工作中用到的比较少,需要注意写法和格式,多联系
  • 参数外层需要通过双引号包裹,"{{param}}"
  • 不用包裹双引号的有:
    • {{#toJson}}tags{{/toJson}}

    • {{#condition}}content{{/condition}}

    • {#condition}}if content{{/condition}} {{^condition}}else content{{/condition}}

参考资料

送一波福利:

福利一

有需要内推JD的同学,可以私信或留言,我帮您内推,流程快!!!

有需要内推JD的同学,可以私信或留言,我帮您内推,流程快!!!

有需要内推JD的同学,可以私信或留言,我帮您内推,流程快!!!

福利二

福利三

相关推荐
量子-Alex37 分钟前
【多模态聚类】用于无标记视频自监督学习的多模态聚类网络
学习·音视频·聚类
吉大一菜鸡42 分钟前
FPGA学习(基于小梅哥Xilinx FPGA)学习笔记
笔记·学习·fpga开发
爱吃西瓜的小菜鸡3 小时前
【C语言】判断回文
c语言·学习·算法
小A1594 小时前
STM32完全学习——SPI接口的FLASH(DMA模式)
stm32·嵌入式硬件·学习
岁岁岁平安4 小时前
spring学习(spring-DI(字符串或对象引用注入、集合注入)(XML配置))
java·学习·spring·依赖注入·集合注入·基本数据类型注入·引用数据类型注入
武昌库里写JAVA4 小时前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计
qq_589568104 小时前
数据可视化echarts学习笔记
学习·信息可视化·echarts
兔C5 小时前
微信小程序的轮播图学习报告
学习·微信小程序·小程序
海海不掉头发5 小时前
苍穹外卖-day05redis 缓存的学习
学习·缓存
小木_.6 小时前
【Python 图片下载器】一款专门为爬虫制作的图片下载器,多线程下载,速度快,支持续传/图片缩放/图片压缩/图片转换
爬虫·python·学习·分享·批量下载·图片下载器