当前位置: 首页 > news >正文

锛网站网站建设中的ftp地址

锛网站,网站建设中的ftp地址,如何做微信小程序开发,网站竞争对手如何做调研一、什么是 Elasticsearch Script#xff1f; Elasticsearch 中的 Script 是一种灵活的方式#xff0c;允许用户在查询、聚合和更新文档时执行自定义的脚本。这些脚本可以用来动态计算字段值、修改查询行为、执行复杂的条件逻辑等等。 二、支持的脚本语言有哪些 支持多种脚本… 一、什么是 Elasticsearch Script Elasticsearch 中的 Script 是一种灵活的方式允许用户在查询、聚合和更新文档时执行自定义的脚本。这些脚本可以用来动态计算字段值、修改查询行为、执行复杂的条件逻辑等等。 二、支持的脚本语言有哪些 支持多种脚本语言包括 Painless、Expression、Mustache、Java等其中默认的是Painless。 三、Painless 脚本的使用 Painless 是一种专为 Elasticsearch 设计的脚本语言具有安全、快速、简单的特点使其在 Elasticsearch 中非常方便入门。 安全性 Painless 被设计为一种安全的脚本语言。它采取了一系列的安全措施如禁止无限循环、禁止访问 Java 类库中的危险类等以减轻潜在的安全风险。 高性能 Painless 是为高性能而设计的特别是在 Elasticsearch 中。它经过了优化可以在大规模数据集上快速执行。 易学易用 Painless 实现了任何具有基本编码经验的人都自然熟悉的语法。Painless 使用 Java 语法的子集并进行了一些额外的改进以增强可读性并删除样板文件。 无需编译 Painless 脚本不需要预先编译。它可以在运行时解释所以我们可以动态调整脚本而无需重新编译整个应用程序。 支持参数化 Painless 允许在脚本中使用参数这可以使脚本更通用适用于多种情况。参数化脚本可以接受外部传递的值从而在不修改脚本的情况下改变其行为。 支持多种数据类型 Painless 支持多种数据类型包括数字、字符串、日期、布尔值等。 集成性 Painless 被紧密集成到 Java 中可以用于查询、聚合、脚本字段、脚本排序等各种用例。 3.1、编写我们的第一个脚本 使用的 Elasticsearch 版本为 8.1历史文章除非特别说明最近更文的 ES版本都为 Elasticsearch 的 8.1 版本 脚本的组成有三个参数只要是在 Elasticsearch API 支持脚本的地方都可以使用如下三个参数来使用脚本。 script: {lang: ...,source | id: ...,params: { ... }}lang执行脚本语言类型默认 painless sourceid脚本的源码本身或者提前存储的 脚本ID params作为变量传递给脚本的参数 下面我们将通过实际的例子来进行说明 3.2、在检索中使用脚本 首先我们先往索引中插入一篇文档 PUT zfc-doc-000007/_doc/1 {sum: 5,message:test painless }使用脚本实现 sum的值 乘2此处使用变量 multiplier在脚本的参数中指定参数值为2其中doc[sum].value * params[multiplier]的意思就是获取文档中sum的值并乘以脚本中 multiplier 的值 GET zfc-doc-000007/_search {script_fields: {my_doubled_field: {script: { source: doc[sum].value * params[multiplier], params: {multiplier: 2}}}} }在获取脚本的参数中的变量值除了使用params[参数名]这种方式之外还可以使用params.get(multiplier)方法获取 GET zfc-doc-000007/_search {script_fields: {my_doubled_field: {script: {lang: painless,source: doc[sum].value * params.get(multiplier);,params: {multiplier: 2}}}} }上面我们是在检索请求中使用的脚本字段来使用的脚本下面我们先内置一个脚本通过使用脚本ID来使用内置的脚本 3.3、使用内置的脚本 创建一个脚本calculate-score它可以使用Math.log(_score * 2) params[my_modifier]修改分数值 POST _scripts/calculate-score {script: {lang: painless,source: Math.log(_score * 2) params[my_modifier]} } 创建完成的脚本我们可以使用_scriptAPI查看脚本的内容 GET _scripts/calculate-score在检索中只需要如下指定脚本的ID即可进行检索时使用 GET zfc-doc-000007/_search {query: {script_score: {query: {match: {message: painless}},script: {id: calculate-score, params: {my_modifier: 2}}}} }如果想删除脚本只需要调用DELETE 即可 DELETE _scripts/calculate-score下面我们再来演示一下如何使用脚本更新文档中的内容 3.4、使用脚本操作文档 先添加一个文档来进行测试 PUT zfc-doc-000007/_doc/1 {counter : 1,tags : [red] }使用脚本对文档中的 counter 的值与脚本中的 count 值进行相加 POST zfc-doc-000007/_update/1 {script : {source: ctx._source.counter params.count,lang: painless,params : {count : 4}} }我们还可以对文档中的数组类型的tags字段进行增加子对象比如增加一个blue POST zfc-doc-000007/_update/1 {script: {source: ctx._source.tags.add(params[tag]),lang: painless,params: {tag: blue}} }使用脚本对文档中的 tags 的值进行删除条件就是当 tag 的值与脚本中的值相等时删除。如下为当 tags 的值为blue时删除blue POST zfc-doc-000007/_update/1 {script: {source: if (ctx._source.tags.contains(params[tag])) { ctx._source.tags.remove(ctx._source.tags.indexOf(params[tag])) },lang: painless,params: {tag: blue}} }上面只是对已有字段的增加删除修改下面还可以使用脚本进行新字段的增加比如增加一个字段new_field值是value_of_new_field POST zfc-doc-000007/_update/1 {script : ctx._source.new_field value_of_new_field }上面是字段的增加下面就是字段的移除 POST zfc-doc-000007/_update/1 {script : ctx._source.remove(new_field) }除了对字段的删除数组对象内部值的删除还可以对文档进行删除。如下当 tags 里面包含 blue 时删除当前文档 POST zfc-doc-000007/_update/1 {script: {source: if (ctx._source.tags.contains(params[tag])) { ctx.op delete } else { ctx.op none },lang: painless,params: {tag: blue}} }3.5、使用脚本解析日志信息 所谓的解析字符串只是一组固定格式的字符串提前使用变量的形式编译在插入文档时通过脚本进行解析保存方便后面的检索等请求 假如我们有如下数据 message : 247.37.0.0 - - [30/Apr/2020:14:31:22 -0500] \GET /images/hm_nbg.jpg HTTP/1.0\ 304 0那么我们可以使用如下变量的形式解析该字符串 %{clientip} %{ident} %{auth} [%{timestamp}] \%{verb} %{request} HTTP/%{httpversion}\ %{status} %{size}下面我们使用例子来说明脚本解析字符串之后是何种形式的存在 创建一个索引保存解析的数据 PUT zfc-doc-000008 {mappings: {properties: {message: {type: wildcard}}} }内置一个脚本实现解析字符串信息并提取需要的信息如下为提取当前日志中的 http 响应信息response对于如下脚本的测试API使用详情可以参考官网 https://www.elastic.co/guide/en/elasticsearch/painless/8.1/painless-execute-api.html POST /_scripts/painless/_execute {script: {source: String responsedissect(%{clientip} %{ident} %{auth} [%{timestamp}] %{verb} %{request} HTTP/%{httpversion} %{response} %{size}).extract(doc[message].value)?.response;if (response ! null) emit(Integer.parseInt(response)); },context: long_field, context_setup: {index: zfc-doc-000008,document: { message: 247.37.0.0 - - [30/Apr/2020:14:31:22 -0500] GET /images/hm_nbg.jpg HTTP/1.0 304 0}} }如果我们还想操作当前解析的数据我们可以使用运行时字段因为运行时字段不需要进行索引会更加的灵活可以很方便的修改脚本及运行方式。 那么我们现在删除一下刚刚创建的索引重新添加一下创建语句如下 DELETE zfc-doc-000008 PUT /zfc-doc-000008 {mappings: {properties: {timestamp: {format: strict_date_optional_time||epoch_second,type: date},message: {type: wildcard}}} }添加一个运行时字段来保存解析的结果 PUT zfc-doc-000008/_mappings {runtime: {http.response: {type: long,script: String responsedissect(%{clientip} %{ident} %{auth} [%{timestamp}] %{verb} %{request} HTTP/%{httpversion} %{response} %{size}).extract(doc[message].value)?.response;if (response ! null) emit(Integer.parseInt(response));}} }添加几条测试数据用于测试 POST /zfc-doc-000008/_bulk?refreshtrue {index:{}} {timestamp:2020-04-30T14:30:17-05:00,message:40.135.0.0 - - [30/Apr/2020:14:30:17 -0500] \GET /images/hm_bg.jpg HTTP/1.0\ 200 24736} {index:{}} {timestamp:2020-04-30T14:30:53-05:00,message:232.0.0.0 - - [30/Apr/2020:14:30:53 -0500] \GET /images/hm_bg.jpg HTTP/1.0\ 200 24736} {index:{}} {timestamp:2020-04-30T14:31:12-05:00,message:26.1.0.0 - - [30/Apr/2020:14:31:12 -0500] \GET /images/hm_bg.jpg HTTP/1.0\ 200 24736} {index:{}} {timestamp:2020-04-30T14:31:19-05:00,message:247.37.0.0 - - [30/Apr/2020:14:31:19 -0500] \GET /french/splash_inet.html HTTP/1.0\ 200 3781} {index:{}} {timestamp:2020-04-30T14:31:22-05:00,message:247.37.0.0 - - [30/Apr/2020:14:31:22 -0500] \GET /images/hm_nbg.jpg HTTP/1.0\ 304 0} {index:{}} {timestamp:2020-04-30T14:31:27-05:00,message:252.0.0.0 - - [30/Apr/2020:14:31:27 -0500] \GET /images/hm_bg.jpg HTTP/1.0\ 200 24736} {index:{}} {timestamp:2020-04-30T14:31:28-05:00,message:not a valid apache log}下面我们进行运行时字段检索响应为304的数据 GET zfc-doc-000008/_search {query: {match: {http.response: 304}},fields : [http.response] } 刚才是属于提前内置好运行时字段我们也可以直接在检索时指定运行时字段来使用但下面所示的仅在运行时有效。如下所示 GET zfc-doc-000008/_search {runtime_mappings: {http.response: {type: long,script: String responsedissect(%{clientip} %{ident} %{auth} [%{timestamp}] %{verb} %{request} HTTP/%{httpversion} %{response} %{size}).extract(doc[message].value)?.response;if (response ! null) emit(Integer.parseInt(response));}},query: {match: {http.response: 304}},fields : [http.response] }我们也可以根据特定的值进行拆分获取所需要的信息 3.6、使用脚本解析 GC 信息 例如如下 Elasticsearch 的 GC 信息 [2021-04-27T16:16:34.6990000][82460][gc,heap,exit] class space used 266K, capacity 384K, committed 384K, reserved 1048576K下面我们根据 GC 信息编写一个解析模式 [%{timestamp}][%{code}][%{desc}] %{ident} used %{usize}, capacity %{csize}, committed %{comsize}, reserved %{rsize}然后在检索时就可以使用如下语句来提交信息到运行时字段首先添加测试数据注意索引名称已经更换解析模式不匹配会报错 POST /zfc-doc-000010/_bulk?refresh {index:{}} {gc: [2021-04-27T16:16:34.6990000][82460][gc,heap,exit] class space used 266K, capacity 384K, committed 384K, reserved 1048576K} {index:{}} {gc: [2021-03-24T20:27:24.1840000][90239][gc,heap,exit] class space used 15255K, capacity 16726K, committed 16844K, reserved 1048576K} {index:{}} {gc: [2021-03-24T20:27:24.1840000][90239][gc,heap,exit] Metaspace used 115409K, capacity 119541K, committed 120248K, reserved 1153024K} {index:{}} {gc: [2021-04-19T15:03:21.7350000][84408][gc,heap,exit] class space used 14503K, capacity 15894K, committed 15948K, reserved 1048576K} {index:{}} {gc: [2021-04-19T15:03:21.7350000][84408][gc,heap,exit] Metaspace used 107719K, capacity 111775K, committed 112724K, reserved 1146880K} {index:{}} {gc: [2021-04-27T16:16:34.6990000][82460][gc,heap,exit] class space used 266K, capacity 367K, committed 384K, reserved 1048576K}使用检索语句展示解析数据到运行时字段中 GET zfc-doc-000010/_search {runtime_mappings: {gc_size: {type: keyword,script: Map gcdissect([%{timestamp}][%{code}][%{desc}] %{ident} used %{usize}, capacity %{csize}, committed %{comsize}, reserved %{rsize}).extract(doc[gc.keyword].value);if (gc ! null) emit(used gc.usize , capacity gc.csize , committed gc.comsize);}},size: 1,aggs: {sizes: {terms: {field: gc_size,size: 10}}},fields : [gc_size] }通过上面的查询测试可以知道Elasticsearch 中的 script 默认的时 painless 语言功能已经非常强大可以满足我们的日常需求如果还想更高级的脚本可以使用 Java 语言来编写自己的脚本。关于 Expressions 的表达式的使用就参与官网吧本文的所有例子均来自官网并自测完成。如有错误欢迎指出共同进步。 后面有机会会出现一片使用Java编译脚本的使用等后面时间吧最近这段时间听尴尬的也托更很久了以后慢慢的都要补上。 2023 最后俩月了加油。 原文链接 https://www.elastic.co/guide/en/elasticsearch/reference/8.1/modules-scripting.html 本文由 mdnice 多平台发布
http://www.zqtcl.cn/news/952618/

相关文章:

  • 一般做美食网站的产品需求我想做个网站
  • 成品网站制作公司应用公园是免费的吗
  • 做毕业网站的流程网站建设价格一览表
  • 企业服务网站开发做网站怎样建立服务器
  • 电子商务他们的代表网站360免费wifi官网
  • 网站后端开发软件cc域名做门户网站
  • 保定设计网站超云建站
  • 建筑工程网官网入口优化网站关键词排名软件
  • 企业网站功能怎么设计wordpress文章图片轮播
  • 网站后台登陆验证码不对阳江房产网楼市数据
  • 营销型网站建设遨龙仙居住房和城乡建设规划局网站
  • 中国做视频网站有哪些淘宝做详情页代码网站
  • 网站开发一般多钱在网站设计公司上班好吗
  • 餐饮连锁企业网站建设方案北京软件研发公司
  • 外国网站架构新闻稿
  • 营销网站建设企划案例友情链接怎么添加
  • seo网站搜索优化目前好的推广平台
  • 快速搭建网站页面黄页88网免费发布信息
  • 做网站能赚吗网址大全查询ip地址
  • html5网站正在建设中商城网站系统
  • 室内设计网课北京网站优化前景
  • 北京 网站建设 知乎上海公司买新能源车
  • 成都微网站wordpress 购买
  • 网站开发一般要用到哪些软件软件开发工程师机构
  • dj网站开发建设网站备案 换空间
  • 网站建设哪家最好网站开发怎么报价
  • app 微商城网站建设网站建设流程百科
  • 网站短期培训学校小说网站怎么建设的
  • 最简单的免费网站制作模板电子商务 网站系统
  • 网站域名备案授权书网站建设长春