Elasticsearch 搜索模板:重用和共享查询

在Elasticsearch(ES)的日常开发和运维中,我们经常会遇到需要频繁执行相似查询的场景。这些查询可能因业务逻辑的复杂性而涉及多个字段、过滤条件和聚合分析。为了优化这些操作,提高开发效率,Elasticsearch提供了搜索模板(Search Templates)的功能。本文将介绍如何使用Elasticsearch的搜索模板来重用和共享查询。

一、为什么使用搜索模板

在日常开发中,尽管大多数查询可能相对简单,但在一些复杂的业务场景(如金融、医药等)中,一次搜索可能需要传入或返回几十个字段,同时涉及复杂的过滤条件和聚合分析。此时,手动编写每个查询不仅效率低下,还容易出错。搜索模板就像MySQL中的存储过程或函数,只需定义一次,后续在代码中通过调用模板并传递参数即可完成搜索功能,极大地提高了开发效率和查询的灵活性。

二、搜索模板的入门案例

2.1 标准形式

搜索模板的基本形式是定义一个包含查询条件的JSON对象,并通过_search/template API调用。例如:

GET /index_name/_search/template
{"source": {"query": {"match": {"remark": "{{kw}}"}},"size": "{{size}}"},"params": {"kw": "真正的数值","size": 100}
}

在这个例子中,{{kw}}{{size}}是模板中的变量,通过params对象传递具体的值。

2.2 toJSON形式

toJSON形式的特点在于source使用字符串来定义,且需要用到转义字符。例如:

GET cars/_search/template
{"source": "{ \"query\": { \"match\": {{#toJson}}parameter{{/toJson}} }}","params": {"parameter": {"remark": "真正的数值"}}
}

2.3 join方法传参

使用join方法可以将数组中的元素拼接成字符串,用于查询条件。例如:

GET index_name/_search/template
{"source": {"query": {"match": {"remark": "{{#join delimiter=' '}}kw{{/join delimiter=' '}}"}}},"params": {"kw": ["大众", "标致", "奔驰", "宝马"]}
}

2.4 默认值形式

在模板中可以为参数设置默认值,如果调用时没有传递该参数,则使用默认值。例如:

GET index_name/_search/template
{"source": {"query": {"range": {"price": {"gte": "{{start}}","lte": "{{end}}{{^end}}200000{{/end}}"}}}},"params": {"start": 100000}
}

三、记忆template并实现重复调用

3.1 Elasticsearch保存template

为了重用模板,我们可以将其保存在Elasticsearch中。通过指定模板的名称,方便后续反复调用。例如:

POST _scripts/my_test_template
{"script": {"lang": "mustache","source": {"query": {"match": {"field_name": "{{kw}}"}}}}
}

3.2 调用template

调用模板时,通过id来指定具体的模板,并传递相应的参数。例如:

GET index_name/_search/template
{"id": "my_test_template","params": {"kw": "自定义template的参数值"}
}

3.3 查询已定义的template

通过GET请求可以查询已定义的模板信息,例如:

GET _scripts/my_test_template

3.4 删除已定义的template

如果需要删除已定义的模板,可以使用DELETE请求,例如:

DELETE _scripts/my_test_template

四、搜索模板的高级应用

4.1 验证模板

Elasticsearch提供了_render/template API来验证模板。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/44208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

连续6年夺冠 6项细分领域第一,中电金信持续领跑中国银行业IT解决方案市场

7月9日,工信部赛迪顾问发布《2023年度中国银行业IT解决方案市场分析报告》(简称《报告》)。中电金信以7.38%的市场份额再度蝉联2023中国银行业IT解决方案市场份额第一,以显著优势持续领跑中国银行业IT解决方案市场。在细分领域&am…

最小生成树prim优先队列优化版

动态数组加结构体省空间&#xff0c;重载结构体排序写队列优先级。 #include<iostream> #include<queue> #include<vector> using namespace std; int n,m; int vis[5001]; struct edge{int v,w; }; vector<edge> G[5001];struct node{int id,d; };st…

视频调色的技巧和方法 视频调色的操作步骤 视频调色用什么软件好免费 会声会影下载免费中文版

学会视频调色&#xff0c;就等于掌握了剪辑艺术的密码。视频调色不是为了画面好看&#xff0c;而是通过精心构思的色彩参数&#xff0c;向观众传达作品的情绪和内涵。普通剪辑师与剪辑高手之间的差距&#xff0c;就在于能否领悟视频调色的真谛。 一、视频调色有什么用 掌握混…

MySQL语法笔记(补充版)

补充上一篇博客没涉及到的实用语法 MySQL语法笔记&#xff08;温习版&#xff09; 查看正在使用的数据库 SELECT DATABASE()查看时区 show VARIABLES like time_zone修改时区 timestamp类型存储的时间与MySQL数据库系统安装时所选的时区有关&#xff0c;在不同时区下查看的同…

springboot定制化书籍销售系统-计算机毕业设计源码71193

摘要 随着电子商务的快速发展和图书市场的不断变革&#xff0c;定制化书籍销售系统的需求日益凸显。本文介绍了一种基于SpringBoot框架的定制化书籍销售系统的设计与实现。该系统旨在满足用户对于个性化、专业化的书籍需求&#xff0c;为用户提供高效、便捷的定制化购书体验。 …

前端JS特效第27波:jQuery商品放大镜预览代码

jQuery商品放大镜预览代码&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下&#xff1a; <!doctype html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content&quo…

结构体案例1

代码 #include <iostream> using namespace std; #include <string> #include <ctime>//学生的结构体 struct Student {string sName;int score; }; //老师的结构体定义 struct Teacher {string tName;struct Student sArray[5]; };//给老师和学生赋值的函数…

JQUERY代码没有生效,先检查是否被引入到html代码中

> 在一个 html 页面中想使用 javascript 代码是很容易的&#xff0c; > 只要在 html 代码中插入 <SCript> </script>标签&#xff0c; > 再往里面放上要执行的 JavaScript 代码就行了。JQUERY代码没有生效&#xff0c;先检查是否被引入 $ 就是jquery的简写…

zabbix“专家坐诊”第245期问答

问题一 Q&#xff1a;vfs.dev.discovery拿的是哪里的文件&#xff0c;我看源码里面获取的是/proc/parttions里面的信息&#xff0c;但是我没有这个device&#xff0c;是怎么获取出来的&#xff1f; 在这里插入图片描述 A&#xff1a;检查下系统内核版本或者agent程序版本&…

n-gram 掩码

n-gram 掩码&#xff08;mask&#xff09;通常用于自然语言处理任务中的文本预处理和特征提取。它的主要目的是在生成 n-gram 时过滤掉一些不需要的或无意义的 n-gram&#xff0c;从而提高模型的效率和准确性。 以下是一些常见的 n-gram 掩码的应用&#xff1a; 停止词过滤&am…

每日新闻7月10日 星期三

星期三 2024年7月10日 农历六月初五 不要羡慕别人的光芒&#xff0c;专注于点燃自己的灯。 每天60秒读懂世界 国务院督促努力应对油罐车事件&#xff1a;成立调查组彻查油罐车运输食用油事件。多个电商平台下架中储粮金鼎食用油&#xff0c;此前客服称产品符合国家标准&…

Linux系统升级OpenSSH版本到openssh-9.8p1

1、升级OpenSSH就要对应的升级OpenSSL&#xff0c;所以要同时要准备openssh-9.8p1.tar.gz和openssl-3.3.1.tar.gz 2、将两个压缩包上传到/home/user目录。 3、为了防止ssh安装失败导致无法连接服务器&#xff0c;需要先安装并启动telnet连接协议&#xff0c;命令如下&#xf…

数据库管理 常用函数,处理查询,管理表记录

常用函数 MySQL服务内置命令 语法&#xff1a;函数名(表头名) 可以单独用&#xff0c;也可以镶嵌 select day(now()) select格式: SELECT 函数(表头名) FROM 库名.表名&#xff1b;SELECT 函数(表头名) FROM 库名.表名 WHERE 条件&#xff1b; departments 部门…

【算法】字符串的排列

难度&#xff1a;中等 给你两个字符串 s1 和 s2 &#xff0c;写一个函数来判断 s2 是否包含 s1 的排列。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 换句话说&#xff0c;s1 的排列之一是 s2 的 子串 。 示例 1&#xff1a; 输入&#xff1a;…

如何在Java中使用GraphQL

如何在Java中使用GraphQL 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; GraphQL是一种用于API的查询语言&#xff0c;由Facebook于2012年开发并在2015年开源…

进程通信1

软硬链接&#xff1a; 区别&#xff1a;有无inode 动态库和静态库 静态库 .a 将 .o文件打包成 lib_.a文件 1、站在制作库工程师角度2、站在使用者角度使用动态库 建立动态库&#xff1a; [LHLVM-8-7-centos lesson24]$ vim mymath.c [LHLVM-8-7-centos lesson24]$ gcc -fPIC…

安卓腾讯桌球多功能助手直装版

安卓13自测效果&#xff0c;安卓12-安卓12以下一定可以的&#xff0c;QQ登陆的话扫码登陆&#xff0c;两个手机&#xff0c;一个扫码&#xff0c;一个游戏&#xff0c;一个手机的话&#xff0c;你可以下载个虚拟机&#xff0c;然后本机直装&#xff0c;用虚拟机QQ扫码即可 微信…

Web3D技术应用在什么场景,能给企业带来什么价值?

Web3D现在已经在很多行业和领域应用了&#xff0c;以 博维数孪 行业用户为例&#xff0c;它能够为企业带来一系列价值&#xff1a; 1、电商领域&#xff1a;在电商中&#xff0c;Web3D技术可以提供3D商品展示&#xff0c;让消费者能够全面了解商品的每一个细节&#xff0c;并且…

react 的条件渲染

##### 使用 if/else 语句 可以在 JSX 中使用普通的 JavaScript if/else 语句来进行条件渲染。 import React from react; function ConditionalRender(props) {const isLoggedIn props.isLoggedIn;if (isLoggedIn) {return <UserGreeting />;} else {return <Guest…

基于与STM32的加湿器之雾化片驱动

基于与STM32的加湿器之雾化片驱动 加湿器是一种由电力驱动&#xff0c;用于增加环境湿度的家用电器。加湿器通过特定的方式&#xff08;如蒸发、超声波振动或加热&#xff09;将水转化为水蒸气&#xff0c;并将这些水蒸气释放到空气中&#xff0c;从而增加空气中的湿度。主要功…