Elasticsearch:ES|QL 函数及操作符

如果你对 ES|QL 还不是很熟悉的话,请阅读之前的文章 “Elasticsearch:ES|QL 查询语言简介​​​​​​​”。ES|QL 提供了一整套用于处理数据的函数和运算符。 功能分为以下几类:

目录

ES|QL 聚合函数

AVG

COUNT

COUNT_DISTINCT

计数为近似值

精度可配置

MAX

MEDIAN

MEDIAN_ABSOLUTE_DEVIATION

MIN

PERCENTILE

PERCENTILE(通常)是近似值

SUM

ES|QL 数学函数

ABS

ACOS

ASIN

ATAN

ATAN2

CEIL

COS

COSH

E

FLOOR

LOG10

PI

POW

类型规则

算术错误

分数指数

支持的输入和输出类型表

ROUND

SIN

SINH

SQRT

TAN

TANH

TAU

ES|QL 字符串函数

CONCAT

LEFT

LENGTH

LTRIM

REPLACE

RIGHT

RTRIM

SPLIT

SUBSTRING

TRIM

ES|QL 日期时间函数

AUTO_BUCKET

数字字段

DATE_EXTRACT

DATE_FORMAT

DATE_PARSE

DATE_TRUNC

NOW

ES|QL 类型转换函数

TO_BOOLEAN

TO_DATETIME

TO_DEGREES

TO_DOUBLE

TO_INTEGER

TO_IP

TO_LONG

TO_RADIANS

TO_STRING

TO_UNSIGNED_LONG

TO_VERSION

ES|QL 条件函数和表达式

CASE

COALESCE

GREATEST

LEAST

ES|QL 多值函数

MV_AVG

MV_CONCAT

MV_COUNT

MV_DEDUPE

MV_MAX

MV_MEDIAN

MV_MIN

MV_SUM

ES|QL 操作符

Binary operators

逻辑运算符

IS NULL 和 IS NOT NULL 谓词

CIDR_MATCH

ENDS_WITH

IN

IS_FINITE

IS_INFINITE

IS_NAN

LIKE

RLIKE

STARTS_WITH


ES|QL 聚合函数

STATS ... BY 函数支持以下聚合函数:

  • AVG
  • COUNT
  • COUNT_DISTINCT
  • MAX
  • MEDIAN
  • MEDIAN_ABSOLUTE_DEVIATION
  • MIN
  • PERCENTILE
  • SUM

AVG

数值字段的平均值。

FROM employees
| STATS AVG(height)
AVG(height):double

1.7682

无论输入类型如何,结果始终是双精度值。

COUNT

计算字段值。

FROM employees
| STATS COUNT(height)
COUNT(height):long

100

可以采用任何字段类型作为输入,并且无论输入类型如何,结果总是 long 类型。

要计算行数,请使用 COUNT(*):

FROM employees
| STATS count = COUNT(*) BY languages
| SORT languages DESC
count:longlanguages:integer

10

null

21

5

18

4

17

3

19

2

15

1

COUNT_DISTINCT

独特值的近似数量。

FROM hosts
| STATS COUNT_DISTINCT(ip0), COUNT_DISTINCT(ip1)
COUNT_DISTINCT(ip0):longCOUNT_DISTINCT(ip1):long

7

8

可以采用任何字段类型作为输入,并且无论输入类型如何,结果总是 long 类型。

计数为近似值

计算精确计数需要将值加载到集合中并返回其大小。 当处理高基数集和/或大的数据集时,这不会扩展,因为所需的内存使用量以及在节点之间通信这些每个分片集的需要将利用集群的太多资源。

此 COUNT_DISTINCT 函数基于 HyperLogLog++ 算法,该算法基于具有一些有趣属性的值的哈希值进行计数:

  • 可配置的精度,决定如何用内存换取准确性,
  • 在低基数集上具有出色的准确性,
  • 固定内存使用:无论有数百个还是数十亿个唯一值,内存使用仅取决于配置的精度。

对于 c 的精度阈值,我们使用的实现需要大约 c * 8 字节。

下图显示了阈值前后误差的变化情况:

对于所有 3 个阈值,计数均准确至配置的阈值。 尽管不能保证,但情况很可能如此。 实践中的准确性取决于所讨论的数据集。 一般来说,大多数数据集都显示出一致的良好准确性。 另请注意,即使阈值低至 100,即使计算数百万个项目,误差仍然非常低(如上图所示,为 1-6%)。

HyperLogLog++ 算法取决于哈希值的前导零,数据集中哈希值的精确分布会影响基数的准确性。

精度可配置

COUNT_DISTINCT 函数采用可选的第二个参数来配置前面讨论的精度。

FROM hosts
| STATS COUNT_DISTINCT(ip0, 80000), COUNT_DISTINCT(ip1, 5)
COUNT_DISTINCT(ip0,80000):longCOUNT_DISTINCT(ip1,5):long

7

9

MAX

数字字段的最大值。

FROM employees
| STATS MAX(languages)
MAX(languages):integer

5

MEDIAN

大于所有值一半且小于所有值一半的值,也称为 50% PERCENTILE。

FROM employees
| STATS MEDIAN(salary), PERCENTILE(salary, 50)
MEDIAN(salary):doublePERCENTILE(salary,50):double

47003

47003

注意:与  PERCENTILE 一样,MEDIAN 通常是近似值。

警告:MEDIAN 也是不确定的(non-deterministic)。 这意味着使用相同的数据可能会得到略有不同的结果。

MEDIAN_ABSOLUTE_DEVIATION

Median 绝对偏差,变异性的测量。 它是一个稳健的统计数据,这意味着它对于描述可能具有异常值或可能不呈正态分布的数据很有用。 对于此类数据,它比标准差更具描述性。

它的计算方法是每个数据点与整个样本中值的偏差的中值。 即,对于随机变量 X,中值绝对偏差为 median(|median(X) - Xi|)。

FROM employees
| STATS MEDIAN(salary), MEDIAN_ABSOLUTE_DEVIATION(salary)
MEDIAN(salary):doubleMEDIAN_ABSOLUTE_DEVIATION(salary):double

47003

10096.5

注意:与 PERCENTILE 一样,MEDIAN_ABSOLUTE_DEVIATION 通常是近似值。

警告:MEDIAN_ABSOLUTE_DEVIATION 也是不确定的(non-disterministic)。 这意味着使用相同的数据可能会得到略有不同的结果。

MIN

数值字段的最小值。

FROM employees
| STATS MIN(languages)
MIN(languages):integer

1

PERCENTILE

观察值出现一定百分比时的值。 例如,第 95 个百分位数是大于观测值 95% 的值,第 50 个百分位数是中位数 (MEDIAN)。

FROM employees
| STATS p0 = PERCENTILE(salary,  0), p50 = PERCENTILE(salary, 50), p99 = PERCENTILE(salary, 99)
p0:doublep50:doublep99:double

25324

47003

74970.29

PERCENTILE(通常)是近似值

有许多不同的算法来计算百分位数。 简单的实现只是将所有值存储在排序数组中。 要查找第 50 个百分位数,只需查找 my_array[count(my_array) * 0.5] 处的值即可。

显然,简单的实现不会扩展 —— 排序数组随着数据集中值的数量线性增长。 为了计算 Elasticsearch 集群中可能数十亿个值的百分位数,需要计算近似百分位数。

百分位数度量使用的算法称为 TDigest(由 Ted Dunning 在使用 T-Digests 计算准确分位数中介绍)。

使用此指标时,需要牢记一些准则:

  • 准确度与 q(1-q) 成正比。 这意味着极端百分位数(例如 99%)比不太极端的百分位数(例如中位数)更准确
  • 对于较小的值集,百分位数非常准确(如果数据足够小,则可能 100% 准确)。
  • 随着桶中值数量的增加,算法开始近似百分位数。 它实际上是用准确性来换取内存节省。 准确的不准确程度很难概括,因为它取决于你的数据分布和聚合的数据量

下图显示了均匀分布的相对误差,具体取决于收集值的数量和请求的百分位数:

它显示了极端百分位数的精度如何更好。 对于大量值,误差会减小的原因是大数定律使值的分布越来越均匀,并且 t-digest 树可以更好地进行汇总。 如果分布更加倾斜,情况就不会如此。

警告:PERCENTILE 也是不确定的(non-deterministic)。 这意味着使用相同的数据可能会得到略有不同的结果。

SUM

数字字段的总和。

FROM employees
| STATS SUM(languages)
SUM(languages):long

281

ES|QL 数学函数

ES|QL 支持这些数学函数:

  • ABS
  • ACOS
  • ASIN
  • ATAN
  • ATAN2
  • CEIL
  • COS
  • COSH
  • E
  • FLOOR
  • LOG10
  • PI
  • POW
  • ROUND
  • SIN
  • SINH
  • SQRT
  • TAN
  • TANH
  • TAU

ABS

返回绝对值。

FROM employees
| KEEP first_name, last_name, height
| EVAL abs_height = ABS(0.0 - height)

支持的类型:

nresult

double

double

integer

integer

long

long

unsigned_long

unsigned_long

ACOS

语法

参数

n: 数字表达。 如果为 null,则该函数返回 null。

描述

角度形式返回 n 的反余弦,以弧度表示。

支持的类型

nresult

double

double

integer

double

long

double

unsigned_long

double

例子

ROW a=.9
| EVAL acos=ACOS(a)

a:double	acos:double
.90.45102681179626236

ASIN

反正弦三角函数。

ROW a=.9
| EVAL asin=ASIN(a)
a:doubleasin:double

.9

1.1197695149986342

支持的类型

nresult

double

double

integer

double

long

double

unsigned_long

double

ATAN

反正切三角函数。

ROW a=12.9
| EVAL atan=ATAN(a)
a:doubleatan:double

12.9

1.4934316673669235

支持的类型

nresult

double

double

integer

double

long

double

unsigned_long

double

ATAN2

笛卡尔平面中正 x 轴与从原点到点 (x , y) 的射线之间的角度。

ROW y=12.9, x=.6
| EVAL atan2=ATAN2(y, x)
y:doublex:doubleatan2:double

12.9

0.6

1.5243181954438936

支持的类型

yxresult

double

double

double

double

integer

double

double

long

double

double

unsigned_long

double

integer

double

double

integer

integer

double

integer

long

double

integer

unsigned_long

double

long

double

double

long

integer

double

long

long

double

long

unsigned_long

double

unsigned_long

double

double

unsigned_long

integer

double

unsigned_long

long

double

unsigned_long

unsigned_long

double

CEIL

将数字向上舍入到最接近的整数。

ROW a=1.8
| EVAL a=CEIL(a)
a:double

2

支持的类型

nresult

double

double

integer

integer

long

long

unsigned_long

unsigned_long

COS

余弦三角函数。

ROW a=1.8
| EVAL cos=COS(a)
a:doublecos:double

1.8

-0.2272020946930871

支持的类型

nresult

double

double

integer

double

long

double

unsigned_long

double

COSH

余弦双曲函数。

ROW a=1.8
| EVAL cosh=COSH(a)
a:doublecosh:double

1.8

3.1074731763172667

支持的类型

nresult

double

double

integer

double

long

double

unsigned_long

double

E

欧拉数。

ROW E()
E():double

2.718281828459045

FLOOR

将数字向下舍入到最接近的整数。

ROW a=1.8
| EVAL a=FLOOR(a)
a:double

1

注意:这是长整型(包括无符号)和整数的 noop (no operation, 不做任何处理)。 对于双精度,这会选择最接近双精度值的整数(Math.floor)。

支持的类型

nresult

double

double

integer

integer

long

long

unsigned_long

unsigned_long

LOG10

返回以 10 为底的对数。输入可以是任何数值,返回值始终是双精度型。

负数的对数为 NaN。 无穷大的对数是无穷大的,就像 0 的对数一样。

ROW d = 1000.0
| EVAL s = LOG10(d)
d: doubles:double

1000.0

3.0

支持的类型

nresult

double

double

integer

double

long

double

unsigned_long

double

PI

圆的周长与其直径的比率。

ROW PI()
PI():double

3.141592653589793

POW

返回基数(第一个参数)的指数(第二个参数)次方的值。 两个参数都必须是数字。

ROW base = 2.0, exponent = 2
| EVAL result = POW(base, exponent)
base:doubleexponent:integerresult:double

2.0

2

4.0

类型规则

返回值的类型由底数和指数的类型决定。 应用以下规则来确定结果类型:

  • 如果基数或指数中有一个是浮点类型,则结果将为 double
  • 否则,如果基数或指数是 64 位(长整型或无符号长整型),则结果将为 long
  • 否则,结果将是一个 32 位整数(这涵盖所有其他数字类型,包括 int、short 和 byte)

例如,使用简单整数作为参数将产生整数结果:

ROW base = 2, exponent = 2
| EVAL s = POW(base, exponent)
base:integerexponent:integers:integer

2

2

4

注意:对于所有情况,实际 pow 函数均使用双精度值执行。 这意味着,对于非常大的非浮点值,该操作导致结果与预期略有不同的可能性很小。 然而,非常大的非浮点值更可能的结果是数值溢出。

算术错误

算术错误和数字溢出不会导致错误。 相反,结果将为 null,并添加 ArithmeticException 警告。 例如:

ROW x = POW(9223372036854775808, 2)
warning:Line 1:9: evaluation of [POW(9223372036854775808, 2)] failed, treating result as null. Only first 20 failures recorded.

warning:Line 1:9: java.lang.ArithmeticException: long overflow

x:long

null

如果需要防止数字溢出,请在任一参数上使用 TO_DOUBLE:

ROW x = POW(9223372036854775808, TO_DOUBLE(1))
x:double

9.223372036854776E18

分数指数

指数可以是分数,这类似于求根。 例如,0.5 的指数将给出底数的平方根:

ROW base = 4, exponent = 0.5
| EVAL s = POW(base, exponent)
base:integerexponent:doubles:double

4

0.5

2.0

支持的输入和输出类型表

为了清楚起见,下表描述了所有数字输入类型组合的输出结果类型:

baseexponentresult

double

double

double

double

integer

double

integer

double

double

integer

integer

integer

long

double

double

long

integer

long

ROUND

将数字四舍五入为最接近指定位数的数字。 如果未提供位数,则默认为 0 位。 如果指定的位数为负数,则四舍五入到小数点左边的位数。

FROM employees
| KEEP first_name, last_name, height
| EVAL height_ft = ROUND(height * 3.281, 1)
first_name:keywordlast_name:keywordheight:doubleheight_ft:double

Arumugam

Ossenbruggen

2.1

6.9

Kwee

Schusler

2.1

6.9

Saniya

Kalloufi

2.1

6.9

SIN

正弦三角函数。

ROW a=1.8
| EVAL sin=SIN(a)
a:doublesin:double

1.8

0.9738476308781951

支持的类型

nresult

double

double

integer

double

long

double

unsigned_long

double

SINH

正弦双曲函数。

ROW a=1.8
| EVAL sinh=SINH(a)
a:doublesinh:double

1.8

2.94217428809568

支持的类型

nresult

double

double

integer

double

long

double

unsigned_long

double

SQRT

返回数字的平方根。 输入可以是任何数值,返回值始终是双精度值。

负数的平方根为 NaN。 无穷大的平方根是无穷大。

ROW d = 100.0
| EVAL s = SQRT(d)
d: doubles:double

100.0

10.0

支持的类型

nresult

double

double

integer

double

long

double

unsigned_long

double

TAN

正切三角函数。

ROW a=1.8
| EVAL tan=TAN(a)
a:doubletan:double

1.8

-4.286261674628062

支持的类型

nresult

double

double

integer

double

long

double

unsigned_long

double

TANH

正切双曲函数。

ROW a=1.8
| EVAL tanh=TANH(a)
a:doubletanh:double

1.8

0.9468060128462683

支持的类型

nresult

double

double

integer

double

long

double

unsigned_long

double

TAU

圆的周长与其半径之比。

ROW TAU()
TAU():double

6.283185307179586

ES|QL 字符串函数

ES|QL 支持以下字符串函数:

  • CONCAT
  • LEFT
  • LENGTH
  • LTRIM
  • REPLACE
  • RIGHT
  • RTRIM
  • SPLIT
  • SUBSTRING
  • TRIM

CONCAT

连接两个或多个字符串。

FROM employees
| KEEP first_name, last_name, height
| EVAL fullname = CONCAT(first_name, " ", last_name)

LEFT

返回从字符串左侧开始提取长度字符的子字符串。

FROM employees
| KEEP last_name
| EVAL left = LEFT(last_name, 3)
| SORT last_name ASC
| LIMIT 5
last_name:keywordleft:keyword

Awdeh

Awd

Azuma

Azu

Baek

Bae

Bamford

Bam

Bernatsky

Ber

支持的类型

stringlengthresult

keyword

integer

keyword

LENGTH

返回字符串的字符长度。

FROM employees
| KEEP first_name, last_name, height
| EVAL fn_length = LENGTH(first_name)

LTRIM

从字符串中删除前导空格。

ROW message = "   some text  ",  color = " red "
| EVAL message = LTRIM(message)
| EVAL color = LTRIM(color)
| EVAL message = CONCAT("'", message, "'")
| EVAL color = CONCAT("'", color, "'")
message:keywordcolor:keyword

'some text '

'red '

REPLACE

该函数将字符串(第一个参数)中正则表达式(第二个参数)的任何匹配项替换为替换字符串(第三个参数)。

如果任何参数为 NULL,则结果为 NULL。

此示例将出现的单词 “World” 替换为单词 “Universe”:

ROW str = "Hello World"
| EVAL str = REPLACE(str, "World", "Universe")
| KEEP str
str:keyword

Hello Universe

返回从右侧开始的字符串中提取 length 字符的子字符串。

FROM employees
| KEEP last_name
| EVAL right = RIGHT(last_name, 3)
| SORT last_name ASC
| LIMIT 5
last_name:keywordright:keyword

Awdeh

deh

Azuma

uma

Baek

aek

Bamford

ord

Bernatsky

sky

支持的类型:

stringlengthresult

keyword

integer

keyword

RTRIM

删除字符串中的尾随空格。

ROW message = "   some text  ",  color = " red "
| EVAL message = RTRIM(message)
| EVAL color = RTRIM(color)
| EVAL message = CONCAT("'", message, "'")
| EVAL color = CONCAT("'", color, "'")
message:keywordcolor:keyword

' some text'

' red'

SPLIT

将单个值字符串拆分为多个字符串。 例如:

ROW words="foo;bar;baz;qux;quux;corge"
| EVAL word = SPLIT(words, ";")

将 “foo;bar;baz;qux;quux;corge” 以 ; 进行分割, 并返回一个数组:

words:keywordword:keyword

foo;bar;baz;qux;quux;corge

[foo,bar,baz,qux,quux,corge]

警告:目前仅支持单字节分隔符。

SUBSTRING

返回字符串的子字符串,由起始位置和可选长度指定。 此示例返回每个姓氏的前三个字符:

FROM employees
| KEEP last_name
| EVAL ln_sub = SUBSTRING(last_name, 1, 3)
last_name:keywordln_sub:keyword

Awdeh

Awd

Azuma

Azu

Baek

Bae

Bamford

Bam

Bernatsky

Ber

负的起始位置被解释为相对于字符串的结尾。 此示例返回每个姓氏的最后三个字符:

FROM employees
| KEEP last_name
| EVAL ln_sub = SUBSTRING(last_name, -3, 3)
last_name:keywordln_sub:keyword

Awdeh

deh

Azuma

uma

Baek

aek

Bamford

ord

Bernatsky

sky

如果省略 length,则 substring 返回字符串的剩余部分。 此示例返回除第一个字符之外的所有字符:

FROM employees
| KEEP last_name
| EVAL ln_sub = SUBSTRING(last_name, 2)
last_name:keywordln_sub:keyword

Awdeh

wdeh

Azuma

zuma

Baek

aek

Bamford

amford

Bernatsky

ernatsky

TRIM

从字符串中删除前导和尾随空格。

ROW message = "   some text  ",  color = " red "
| EVAL message = TRIM(message)
| EVAL color = TRIM(color)
message:scolor:s

some text

red

支持的类型

arg1result

keyword

keyword

text

text

ES|QL 日期时间函数

ES|QL 支持以下日期时间函数:

  • AUTO_BUCKET
  • DATE_EXTRACT
  • DATE_FORMAT
  • DATE_PARSE
  • DATE_TRUNC
  • NOW

AUTO_BUCKET

创建人性化的桶并为每行返回与该行所属的结果桶相对应的日期时间值。 将 AUTO_BUCKET 与 STATS ... BY 结合起来创建日期直方图。

你提供目标桶数量、开始日期和结束日期,它会选择适当的桶大小来生成目标数量或更少的桶。 例如,这要求全年最多 20 个桶,其中选择每月桶:

ROW date=TO_DATETIME("1985-07-09T00:00:00.000Z")
| EVAL bucket=AUTO_BUCKET(date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z")
date:datetimebucket:datetime

1985-07-09T00:00:00.000Z

1985-07-01T00:00:00.000Z

我们的目标不是提供准确的目标桶数,而是选择一个人们感到满意的范围,最多提供目标桶数。

如果你要求更多的存储桶,那么 AUTO_BUCKET 可以选择较小的范围。 例如,一年内最多请求 100 个桶将为你提供一周的桶:

ROW date=TO_DATETIME("1985-07-09T00:00:00.000Z")
| EVAL bucket=AUTO_BUCKET(date, 100, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z")
date:datetimebucket:datetime

1985-07-09T00:00:00.000Z

1985-07-08T00:00:00.000Z

AUTO_BUCKET 不过滤任何行。 它仅使用提供的时间范围来选择合适的桶大小。 对于日期超出范围的行,它返回与范围之外的存储桶对应的日期时间。 将 AUTO_BUCKET 与 WHERE 结合起来以过滤行。

更完整的示例可能如下所示:

FROM employees
| WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z"
| EVAL bucket = AUTO_BUCKET(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z")
| STATS AVG(salary) BY bucket
| SORT bucket
AVG(salary):doublebucket:date

46305.0

1985-02-01T00:00:00.000Z

44817.0

1985-05-01T00:00:00.000Z

62405.0

1985-07-01T00:00:00.000Z

49095.0

1985-09-01T00:00:00.000Z

51532.0

1985-10-01T00:00:00.000Z

54539.75

1985-11-01T00:00:00.000Z

注意:AUTO_BUCKET 不会创建与任何文档都不匹配的存储桶。 这就是上面的示例缺少 1985-03-01 和其他日期的原因。

数字字段

auto_bucket 还可以对数字字段进行操作,如下所示:

FROM employees
| WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z"
| EVAL bs = AUTO_BUCKET(salary, 20, 25324, 74999)
| SORT hire_date, salary
| KEEP hire_date, salary, bs
hire_date:datesalary:integerbs:double

1985-02-18T00:00:00.000Z

66174

65000.0

1985-02-24T00:00:00.000Z

26436

25000.0

1985-05-13T00:00:00.000Z

44817

40000.0

1985-07-09T00:00:00.000Z

62405

60000.0

1985-09-17T00:00:00.000Z

49095

45000.0

1985-10-14T00:00:00.000Z

54329

50000.0

1985-10-20T00:00:00.000Z

48735

45000.0

1985-11-19T00:00:00.000Z

52833

50000.0

1985-11-20T00:00:00.000Z

33956

30000.0

1985-11-20T00:00:00.000Z

74999

70000.0

1985-11-21T00:00:00.000Z

56371

55000.0

与上面的示例不同,你有意在日期范围上进行过滤,你很少想在数字范围上进行过滤。 所以你必须分别找到最小值和最大值。 我们还没有一种简单的方法来自动做到这一点。 改进即将到来!

DATE_EXTRACT

提取日期的部分内容,例如年、月、日、小时。 支持的字段类型是 java.time.temporal.ChronoField 提供的字段类型。

ROW date = DATE_PARSE("yyyy-MM-dd", "2022-05-06")
| EVAL year = DATE_EXTRACT("year", date)
date:dateyear:long

2022-05-06T00:00:00.000Z

2022

DATE_FORMAT

以提供的格式返回日期的字符串表示形式。 如果未指定格式,则使用 yyyy-MM-dd'T'HH:mm:ss.SSSZ 格式。

FROM employees
| KEEP first_name, last_name, hire_date
| EVAL hired = DATE_FORMAT("YYYY-MM-dd", hire_date)

DATE_PARSE

语法

DATE_PARSE([format,] date_string)

参数

format日期格式。 有关语法,请参阅 DateTimeFormatter 文档。 如果为 null,则该函数返回 null。
date_string作为字符串的日期表达式。 如果为 null 或空字符串,则该函数返回 null。

描述

通过使用第一个参数中指定的格式解析第二个参数来返回日期。

ROW date_string = "2022-05-06"
| EVAL date = DATE_PARSE("yyyy-MM-dd", date_string)
date_string:keyworddate:date

2022-05-06

2022-05-06T00:00:00.000Z

DATE_TRUNC

将日期向下舍入到最接近的间隔。 间隔可以使用时间跨度文字语法来表达。

FROM employees
| EVAL year_hired = DATE_TRUNC(1 year, hire_date)
| STATS COUNT(emp_no) BY year_hired
| SORT year_hired
ROW date_string = "2022-05-06"
| EVAL date = DATE_PARSE("yyyy-MM-dd", date_string)
| EVAL year_hired = DATE_TRUNC(1 year, date)
| keep date, year_hired

NOW

返回当前日期和时间。

ROW current_date = NOW()

ES|QL 类型转换函数

ES|QL 支持以下类型转换函数:

  • TO_BOOLEAN
  • TO_DATETIME
  • TO_DEGREES
  • TO_DOUBLE
  • TO_INTEGER
  • TO_IP
  • TO_LONG
  • TO_RADIANS
  • TO_STRING
  • TO_UNSIGNED_LONG
  • TO_VERSION

TO_BOOLEAN

将输入值转换为布尔值。

输入可以是单值或多值字段或表达式。 输入类型必须是字符串或数字类型。

字符串值 “true” 将不区分大小写地转换为布尔值 true。 对于其他任何内容,包括空字符串,该函数将返回 false。 例如:

ROW str = ["true", "TRuE", "false", "", "yes", "1"]
| EVAL bool = TO_BOOLEAN(str)
str:keywordbool:boolean

["true", "TRuE", "false", "", "yes", "1"]

[true, true, false, false, false, false]

数值 0 将转换为 false,其他值将转换为 true。

别名:TO_BOOL

TO_DATETIME

将输入值转换为日期值。

输入可以是单值或多值字段或表达式。 输入类型必须是字符串或数字类型。

仅当字符串遵循 yyyy-MM-dd'T'HH:mm:ss.SSS'Z' 格式时才会成功转换(要转换其他格式的日期,请使用 DATE_PARSE)。 例如:

ROW string = ["1953-09-02T00:00:00.000Z", "1964-06-02T00:00:00.000Z", "1964-06-02 00:00:00"]
| EVAL datetime = TO_DATETIME(string)
string:keyworddatetime:date

["1953-09-02T00:00:00.000Z", "1964-06-02T00:00:00.000Z", "1964-06-02 00:00:00"]

[1953-09-02T00:00:00.000Z, 1964-06-02T00:00:00.000Z]

请注意,在此示例中,源多值字段中的最后一个值尚未转换。 原因是,如果不遵守日期格式,转换将导致空值。 发生这种情况时,警告标头将添加到响应中。 标头将提供有关失败来源的信息:

"Line 1:112: evaluation of [TO_DATETIME(string)] failed, treating result as null. Only first 20 failures recorded."

以下标头将包含失败原因和违规值:

"java.lang.IllegalArgumentException: failed to parse date field [1964-06-02 00:00:00] with format [yyyy-MM-dd'T'HH:mm:ss.SSS'Z']"

如果输入参数是数字类型,则其值将被解释为自 Unix 纪元以来的毫秒数。 例如:

ROW int = [0, 1]
| EVAL dt = TO_DATETIME(int)
int:integerdt:date

[0, 1]

[1970-01-01T00:00:00.000Z, 1970-01-01T00:00:00.001Z]

别名:TO_DT

TO_DEGREES

将弧度数转换为度数。

输入可以是单值或多值字段或表达式。 输入类型必须是数字类型,并且结果始终为 double。

例子:

ROW rad = [1.57, 3.14, 4.71]
| EVAL deg = TO_DEGREES(rad)
rad:doubledeg:double

[1.57, 3.14, 4.71]

[89.95437383553924, 179.9087476710785, 269.86312150661774]

TO_DOUBLE

将输入值转换为双精度值。

输入可以是单值或多值字段或表达式。 输入类型必须是布尔型、日期型、字符串型或数字型。

例子:

ROW str1 = "5.20128E11", str2 = "foo"
| EVAL dbl = TO_DOUBLE("520128000000"), dbl1 = TO_DOUBLE(str1), dbl2 = TO_DOUBLE(str2)
str1:keywordstr2:keyworddbl:doubledbl1:doubledbl2:double

5.20128E11

foo

5.20128E11

5.20128E11

null

请注意,在此示例中,不可能对字符串进行最后一次转换。 发生这种情况时,结果为空值。 在这种情况下,警告标头将添加到响应中。 标头将提供有关失败来源的信息:

"Line 1:115: evaluation of [TO_DOUBLE(str2)] failed, treating result as null. Only first 20 failures recorded."

以下标头将包含失败原因和违规值:

"java.lang.NumberFormatException: For input string: \"foo\""

如果输入参数是日期类型,则其值将被解释为自 Unix 纪元以来的毫秒数,并转换为双精度。

布尔值 true 将转换为 double 1.0, false 则转换为 0.0。

别名:TO_DBL

TO_INTEGER

将输入值转换为整数值。

输入可以是单值或多值字段或表达式。 输入类型必须是布尔型、日期型、字符串型或数字型。

例子:

ROW long = [5013792, 2147483647, 501379200000]
| EVAL int = TO_INTEGER(long)
long:longint:integer

[5013792, 2147483647, 501379200000]

[5013792, 2147483647]

请注意,在此示例中,多值字段的最后一个值无法转换为整数。 发生这种情况时,结果为空值。 在这种情况下,警告标头将添加到响应中。 标头将提供有关失败来源的信息:

"Line 1:61: evaluation of [TO_INTEGER(long)] failed, treating result as null. Only first 20 failures recorded."

以下标头将包含失败原因和违规值:

"org.elasticsearch.xpack.ql.QlIllegalArgumentException: [501379200000] out of [integer] range"

如果输入参数是日期类型,则其值将被解释为自 Unix 纪元以来的毫秒数,并转换为整数。

布尔值 true 将转换为整数 1, false 将转换为 0。

别名:TO_INT

TO_IP

将输入字符串转换为 IP 值。

输入可以是单值或多值字段或表达式。

例子:

ROW str1 = "1.1.1.1", str2 = "foo"
| EVAL ip1 = TO_IP(str1), ip2 = TO_IP(str2)
| WHERE CIDR_MATCH(ip1, "1.0.0.0/8")
str1:keywordstr2:keywordip1:ipip2:ip

1.1.1.1

foo

1.1.1.1

null

请注意,在上面的示例中,字符串的最后一次转换是不可能的。 发生这种情况时,结果为空值。 在这种情况下,警告标头将添加到响应中。 标头将提供有关失败来源的信息:

"Line 1:68: evaluation of [TO_IP(str2)] failed, treating result as null. Only first 20 failures recorded."

以下标头将包含失败原因和违规值:

"java.lang.IllegalArgumentException: 'foo' is not an IP string literal."

TO_LONG

将输入值转换为长整型值。

输入可以是单值或多值字段或表达式。 输入类型必须是布尔型、日期型、字符串型或数字型。

例子:

ROW str1 = "2147483648", str2 = "2147483648.2", str3 = "foo"
| EVAL long1 = TO_LONG(str1), long2 = TO_LONG(str2), long3 = TO_LONG(str3)
str1:keywordstr2:keywordstr3:keywordlong1:longlong2:longlong3:long

2147483648

2147483648.2

foo

2147483648

2147483648

null

请注意,在此示例中,不可能对字符串进行最后一次转换。 发生这种情况时,结果为空值。 在这种情况下,警告标头将添加到响应中。 标头将提供有关失败来源的信息:

"Line 1:113: evaluation of [TO_LONG(str3)] failed, treating result as null. Only first 20 failures recorded."

以下标头将包含失败原因和违规值:

"java.lang.NumberFormatException: For input string: \"foo\""

如果输入参数是日期类型,则其值将被解释为自 Unix 纪元以来的毫秒数,并转换为 long。

布尔值 true 将转换为 long 1, false 将转换为 0。

TO_RADIANS

将度数转换为弧度。

输入可以是单值或多值字段或表达式。 输入类型必须是数字类型,并且结果始终为 double。

例子:

ROW deg = [90.0, 180.0, 270.0]
| EVAL rad = TO_RADIANS(deg)
deg:doublerad:double

[90.0, 180.0, 270.0]

[1.5707963267948966, 3.141592653589793, 4.71238898038469]

TO_STRING

将字段转换为字符串。 例如:

ROW a=10
| EVAL j = TO_STRING(a)
a:integerj:keyword

10

"10"

它也适用于多值字段:

ROW a=[10, 9, 8]
| EVAL j = TO_STRING(a)
a:integerj:keyword

[10, 9, 8]

["10", "9", "8"]

别名:TO_STR

支持的类型:

vresult

boolean

keyword

datetime

keyword

double

keyword

integer

keyword

ip

keyword

keyword

keyword

long

keyword

text

keyword

unsigned_long

keyword

version

keyword

TO_UNSIGNED_LONG

将输入值转换为无符号长整型值。

输入可以是单值或多值字段或表达式。 输入类型必须是布尔型、日期型、字符串型或数字型。

例子:

ROW str1 = "2147483648", str2 = "2147483648.2", str3 = "foo"
| EVAL long1 = TO_UNSIGNED_LONG(str1), long2 = TO_ULONG(str2), long3 = TO_UL(str3)
str1:keywordstr2:keywordstr3:keywordlong1:unsigned_longlong2:unsigned_longlong3:unsigned_long

2147483648

2147483648.2

foo

2147483648

2147483648

null

请注意,在此示例中,不可能对字符串进行最后一次转换。 发生这种情况时,结果为空值。 在这种情况下,警告标头将添加到响应中。 标头将提供有关失败来源的信息:

"Line 1:133: evaluation of [TO_UL(str3)] failed, treating result as null. Only first 20 failures recorded."

以下标头将包含失败原因和违规值:

"java.lang.NumberFormatException: Character f is neither a decimal digit number, decimal point, nor \"e\" notation exponential mark."

如果输入参数是日期类型,则其值将被解释为自 Unix 纪元以来的毫秒数,并转换为 unsigned long。

Boolean true 将转换为 unsigned long 1, false 则转换为 0。

别名:TO_ULONG、TO_UL

TO_VERSION

将输入字符串转换为版本值。 例如:

ROW v = TO_VERSION("1.2.3")
v:version

1.2.3

输入可以是单值或多值字段或表达式。

别名:TO_VER

支持的类型:

vresult

keyword

version

text

version

version

version

ES|QL 条件函数和表达式

条件函数通过以 if-else 方式求值来返回其参数之一。 ES|QL 支持这些条件函数:

  • CASE
  • COALESCE
  • GREATEST
  • LEAST

CASE

语法:

CASE(condition1, value1[, ..., conditionN, valueN][, default_value])

参数

conditionX一个条件
valueX当相应条件第一个评估为 true 时返回的值。
default_value没有条件匹配时返回的默认值。

描述

接受条件和值对。 该函数返回属于第一个值为 true 的条件的值。

如果参数数量为奇数,则最后一个参数为默认值,当没有条件匹配时返回该默认值。

FROM employees
| EVAL type = CASE(languages <= 1, "monolingual",languages <= 2, "bilingual","polyglot")
| KEEP emp_no, languages, type
emp_no:integerlanguages:integertype:keyword

10001

2

bilingual

10002

5

polyglot

10003

4

polyglot

10004

5

polyglot

10005

1

monolingual

COALESCE

返回第一个非空值。

ROW a=null, b="b"
| EVAL COALESCE(a, b)
a:nullb:keywordCOALESCE(a,b):keyword

null

b

b

GREATEST

返回许多列中的最大值。 这与 MV_MAX 类似,只是它旨在一次在多个列上运行。

ROW a = 10, b = 20
| EVAL g = GREATEST(a, b)
a:integerb:integerg:integer

10

20

20

注意:当在 keyword 或 text 字段上运行时,这将按字母顺序返回最后一个字符串。 当在布尔列上运行时,如果任何值为 true,则返回 true。

支持的类型

firstrestresult

boolean

boolean

boolean

double

double

double

integer

integer

integer

ip

ip

ip

keyword

keyword

keyword

long

long

long

text

text

text

version

version

version

LEAST

返回许多列中的最小值。 这与 MV_MIN 类似,只是它旨在一次在多个列上运行。

ROW a = 10, b = 20
| EVAL l = LEAST(a, b)
a:integerb:integerl:integer

10

20

10

注意:当在 keyword 或 text 字段上运行时,这将按字母顺序返回第一个字符串。 当在布尔列上运行时,如果任何值为 false,则返回 false。

支持的类型

firstrestresult

boolean

boolean

boolean

double

double

double

integer

integer

integer

ip

ip

ip

keyword

keyword

keyword

long

long

long

text

text

text

version

version

version

ES|QL 多值函数

ES|QL 支持以下多值函数:

  • MV_AVG
  • MV_CONCAT
  • MV_COUNT
  • MV_DEDUPE
  • MV_MAX
  • MV_MEDIAN
  • MV_MIN
  • MV_SUM

MV_AVG

将多值字段转换为包含所有值的平均值的单值字段。 例如:

ROW a=[3, 5, 1, 6]
| EVAL avg_a = MV_AVG(a)
a:integeravg_a:double

[3, 5, 1, 6]

3.75

注意:输出类型始终为 double,输入类型可以是任意数字。

MV_CONCAT

将多值字符串字段转换为单值字段,其中包含由分隔符分隔的所有值的串联:

ROW a=["foo", "zoo", "bar"]
| EVAL j = MV_CONCAT(a, ", ")
a:keywordj:keyword

["foo", "zoo", "bar"]

"foo, zoo, bar"

如果要连接非字符串字段,请先对它们调用 TO_STRING:

ROW a=[10, 9, 8]
| EVAL j = MV_CONCAT(TO_STRING(a), ", ")
a:integerj:keyword

[10, 9, 8]

"10, 9, 8"

MV_COUNT

将多值字段转换为包含值数量的单值字段:

ROW a=["foo", "zoo", "bar"]
| EVAL count_a = MV_COUNT(a)
a:keywordcount_a:integer

["foo", "zoo", "bar"]

3

MV_DEDUPE

从多值字段中删除重复项。 例如:

ROW a=["foo", "foo", "bar", "foo"]
| EVAL dedupe_a = MV_DEDUPE(a)
a:keyworddedupe_a:keyword

["foo", "foo", "bar", "foo"]

["foo", "bar"]

注意:MV_DEDUPE 可能(但并不总是)对字段中的值进行排序。

MV_MAX

将多值字段转换为包含最大值的单值字段。 例如:

ROW a=[3, 5, 1]
| EVAL max_a = MV_MAX(a)
a:integermax_a:integer

[3, 5, 1]

5

它可以由任何字段类型使用,包括 keyword 字段。 在这种情况下,选择最后一个字符串,逐字节比较它们的 utf-8 表示形式:

ROW a=["foo", "zoo", "bar"]
| EVAL max_a = MV_MAX(a)
a:keywordmax_a:keyword

["foo", "zoo", "bar"]

"zoo"

MV_MEDIAN

将多值字段转换为包含中值的单值字段。 例如:

ROW a=[3, 5, 1]
| EVAL median_a = MV_MEDIAN(a)
a:integermedian_a:integer

[3, 5, 1]

3

它可以被任何数字字段类型使用并返回相同类型的值。 如果该行的一列有偶数个值,则结果将是中间两个条目的平均值。 如果该字段不是浮点型,则平均值向下舍入:

ROW a=[3, 7, 1, 6]
| EVAL median_a = MV_MEDIAN(a)
a:integermedian_a:integer

[3, 7, 1, 6]

4

MV_MIN

将多值字段转换为包含最小值的单值字段。 例如:

ROW a=[2, 1]
| EVAL min_a = MV_MIN(a)
a:integermin_a:integer

[2, 1]

1

它可以由任何字段类型使用,包括 keyword 字段。 在这种情况下,选择第一个字符串,逐字节比较它们的 utf-8 表示形式:

ROW a=["foo", "bar"]
| EVAL min_a = MV_MIN(a)
a:keywordmin_a:keyword

["foo", "bar"]

"bar"

MV_SUM

将多值字段转换为包含所有值之和的单值字段。 例如:

ROW a=[3, 5, 6]
| EVAL sum_a = MV_SUM(a)
a:integersum_a:integer

[3, 5, 6]

14

ES|QL 操作符

用于与一个或多个表达式进行比较的布尔运算符。

  • Binary operators
  • Logical operators
  • IS NULL and IS NOT NULL predicates
  • CIDR_MATCH
  • ENDS_WITH
  • IN
  • IS_FINITE
  • IS_INFINITE
  • IS_NAN
  • LIKE
  • RLIKE
  • STARTS_WITH

Binary operators

支持以下二进制比较运算符:

  • 等于:==
  • 不等式:!=
  • 小于:<
  • 小于或等于:<=
  • 大于:>
  • 大于或等于:>=

逻辑运算符

支持以下逻辑运算符:

  • AND
  • OR
  • NOT

IS NULL 和 IS NOT NULL 谓词

对于 NULL 比较,请使用 IS NULL 和 IS NOT NULL 谓词:

FROM employees
| WHERE birth_date IS NULL
| KEEP first_name, last_name
| SORT first_name
| LIMIT 3
first_name:keywordlast_name:keyword

Basil

Tramer

Florian

Syrotiuk

Lucien

Rosenbaum

FROM employees
| WHERE is_rehired IS NOT NULL
| STATS COUNT(emp_no)
COUNT(emp_no):long

84

CIDR_MATCH

如果提供的 IP 包含在提供的 CIDR 块之一中,则返回 true。

CIDR_MATCH 接受两个或多个参数。 第一个参数是 ip 类型的 IP 地址(支持 IPv4 和 IPv6)。 后续参数是用于测试 IP 的 CIDR 块。

FROM hosts
| WHERE CIDR_MATCH(ip, "127.0.0.2/32", "127.0.0.3/32")

ENDS_WITH

返回一个布尔值,指示关键字字符串是否以另一个字符串结尾:

FROM employees
| KEEP last_name
| EVAL ln_E = ENDS_WITH(last_name, "d")
last_name:keywordln_E:boolean

Awdeh

false

Azuma

false

Baek

false

Bamford

true

Bernatsky

false

支持的类型:

arg1arg2result

keyword

keyword

boolean

IN

IN 运算符允许测试字段或表达式是否等于文字、字段或表达式列表中的元素:

ROW a = 1, b = 4, c = 3
| WHERE c-a IN (3, b / 2, a)

IS_FINITE

返回一个布尔值,指示其输入是否是有限数。

ROW d = 1.0
| EVAL s = IS_FINITE(d/0)

IS_INFINITE

返回一个布尔值,指示其输入是否是无限的。

ROW d = 1.0
| EVAL s = IS_INFINITE(d/0)

IS_NAN

返回一个布尔值,指示其输入是否不是数字。

ROW d = 1.0
| EVAL s = IS_NAN(d)

LIKE

使用 LIKE 使用通配符根据字符串模式过滤数据。 LIKE 通常作用于位于运算符左侧的字段,但它也可以作用于常量(文字)表达式。 运算符的右侧代表模式。

支持以下通配符:

  • * 匹配零个或多个字符。
  • ? 匹配一个字符。
FROM employees
| WHERE first_name LIKE "?b*"
| KEEP first_name, last_name

RLIKE

使用 RLIKE 使用正则表达式根据字符串模式过滤数据。 RLIKE 通常作用于位于运算符左侧的字段,但它也可以作用于常量(文字)表达式。 运算符的右侧代表模式。

FROM employees
| WHERE first_name RLIKE ".leja.*"
| KEEP first_name, last_name

STARTS_WITH

返回一个布尔值,指示关键字字符串是否以另一个字符串开头:

FROM employees
| KEEP last_name
| EVAL ln_S = STARTS_WITH(last_name, "B")
last_name:keywordln_S:boolean

Awdeh

false

Azuma

false

Baek

true

Bamford

true

Bernatsky

true

支持的类型

arg1arg2result

keyword

keyword

boolean

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

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

相关文章

geemap学习笔记013:为遥感动态GIF图添加图名

前言 遥感动态GIF图可以展示地理区域随时间的变化&#xff0c;这对于监测自然灾害、湿地变化、城市扩展、农田变化等方面非常有用&#xff0c;并且可以反复观察图像&#xff0c;以更深入地了解地表的动态变化。本节主要是对遥感动态GIF图添加图名&#xff0c;以便于更好地理解…

聚观早报 |一加12正式开启预订;OPPO Reno11系列卖点

【聚观365】11月24日消息 一加12正式开启预订 OPPO Reno11系列卖点 小鹏第三季度营收财报 Claude 2.1 聊天机器人公布 现代汽车将与伦敦大学学院合作 一加12正式开启预订 全新的一加12系列公开亮相已有一段时间&#xff0c;不久前一加官方宣布&#xff0c;该机将于12月4日…

ebpf实战(一)-------监控udp延迟

问题背景: 为了分析udp数据通信中端到端的延迟,我们需要对整个通信链路的每个阶段进行监控,找出延迟最长的阶段. udp接收端有2个主要路径 1.数据包到达本机后&#xff0c;由软中断处理程序将数据包接收并放入udp socket的接收缓冲区 数据接收流程 2. 应用程序调用recvmsg等a…

<JavaEE> 什么是进程控制块(PCB Process Control Block)?

目录 一、进程控制块的概念 二、进程控制块的重要属性 2.1 唯一身份标识&#xff08;PID&#xff09; 2.2 内存指针 2.3 文件描述符表 2.4 状态 2.5 优先级 2.6 记账信息 2.7 上下文 一、进程控制块的概念 进程控制块&#xff08;Process Control Block, PCB&#xff…

uni-app 跨端开发注意事项

文章目录 前言H5正常但App异常的可能性标题二H5正常但小程序异常的可能性小程序正常但App异常的可能性小程序或App正常&#xff0c;但H5异常的可能性App正常&#xff0c;小程序、H5异常的可能性使用 Vue.js 的注意区别于传统 web 开发的注意H5 开发注意微信小程序开发注意支付宝…

Docker实用篇

Docker实用篇 0.学习目标 1.初识Docker 1.1.什么是Docker 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署…

STM32入门笔记15_PWR电源管理模块

PWR和低功耗模式 PWR简介 PWR(Power Control) 电源控制PWR负责管理STM32内部的电源供电部分&#xff0c;可以实现可编程电压检测器和低功耗模式的功能可编程电压检测器(PVD) 可以监控VDD电源电压&#xff0c;当VDD下降到PVD阈值以下或上升到PVD阈值之上时&#xff0c;PVD会触…

C++学习之路(一)什么是C++?如何循序渐进的学习C++?【纯干货】

C是一种高级编程语言&#xff0c;是对C语言的扩展和增强。它在C语言的基础上添加了面向对象编程&#xff08;OOP&#xff09;的特性&#xff0c;使得开发者能够更加灵活和高效地编写代码。 C的名字中的“”符号表示在C语言的基础上向前发展一步&#xff0c;即“加加”&#x…

iOS APP包分析工具 | 京东云技术团队

介绍 分享一款用于分析iOSipa包的脚本工具&#xff0c;使用此工具可以自动扫描发现可修复的包体积问题&#xff0c;同时可以生成包体积数据用于查看。这块工具我们团队内部已经使用很长一段时间&#xff0c;希望可以帮助到更多的开发同学更加效率的优化包体积问题。 工具下载…

在VMware Workstation的Centos上实现KVM虚拟机的安装部署:详细安装部署过程(保姆级)

KVM概述 • 以色列qumranet公司研发&#xff0c;后被RedHad公司收购 &#xff08;1&#xff09;kvm只支持x86平台 &#xff08;2&#xff09;依赖于 HVM,inter VT AMD-v • KVM是&#xff08;Kernel-based Virtual Machine&#xff09;的简称&#xff0c;是一个开源的系统虚拟…

【Unity】 UGUI的PhysicsRaycaster (物理射线检测)组件的介绍及使用

1. 什么是PhysicsRaycaster组件&#xff1f; PhysicsRaycaster是Unity UGUI中的一个组件&#xff0c;用于在UI元素上进行物理射线检测。它可以检测鼠标或触摸事件是否发生在UI元素上&#xff0c;并将事件传递给相应的UI元素。 2. PhysicsRaycaster的工作原理 PhysicsRaycast…

【Proteus仿真】【51单片机】智能垃圾桶设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用报警模块、LCD1602液晶模块、按键模块、人体红外传感器、HCSR04超声波、有害气体传感器、SG90舵机等。 主要功能&#xff1a; 系统运行后&#xf…

基于GPRS的汽车碰撞自动报警系统(论文+源码)

1. 系统设计 本次基于GPRS的汽车碰撞自动报警系统的设计中&#xff0c;其主要的目标功能如下&#xff1a;1、实时检测当前的GPS精度和纬度坐标&#xff1b;2.当发生碰撞后系统自动将当前的信息通过GPRS数据发送到远端数据进行报警&#xff1b;3、系统在碰撞后一方面进行本地报警…

听GPT 讲Rust源代码--src/tools(2)

题图来自AI生成 File: rust/src/tools/rust-analyzer/crates/hir-def/src/src.rs rust-analyzer 是一个 Rust 语言的语法分析器和语义分析器&#xff0c;用于提供代码补全、导航、重构等开发工具。而 rust-analyzer 的代码实现存储在 rust/src/tools/rust-analyzer 这个文件夹中…

010 OpenCV中的4种平滑滤波

目录 一、环境 二、平滑滤波 2.1、均值滤波 2.2、高斯滤波 2.3、中值滤波 2.4、双边滤波 三、完整代码 一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、平滑滤波 2.1、均值滤波 在OpenCV库中&#xff0c;blur函数是一种简…

递归剪枝题

期中考终于考完了&#xff0c;整道题奖励下自己 我一北大同学问我的&#xff0c;说他递归超时了&#xff0c;叫我想一个办法 后面他说他加了个剪枝就过了&#xff0c;然后我自己尝试了一个方法&#xff1a; 就是先把城市按1到n排列&#xff0c;然后考虑互换&#xff0c;如果互…

考过了PMP,面试的时候应该怎么办?

近期喜番在后台收到了很多同学们的私信&#xff0c;表示自己已经过了8月份的PMP考试&#xff0c;开始着手往项目管理岗位转型&#xff0c;但是对于项目管理岗位的面试却一筹莫展。放轻松&#xff0c;大家的需求喜番都了解了&#xff0c;喜番给大家总结了一些项目经理在面试的时…

SpringCloud 微服务全栈体系(十七)

第十一章 分布式搜索引擎 elasticsearch 七、搜索结果处理 搜索的结果可以按照用户指定的方式去处理或展示。 1. 排序 elasticsearch 默认是根据相关度算分&#xff08;_score&#xff09;来排序&#xff0c;但是也支持自定义方式对搜索结果排序。可以排序字段类型有&#…

【Python】Fastapi swagger-ui.css 、swagger-ui-bundle.js 无法加载,docs无法加载,redocs无法使用

使用fastapi的时候&#xff0c;swagger-ui.css 、swagger-ui-bundle.js、redoc.standalone.js 有时候无法加载&#xff08;国内环境原因或者是局域网屏蔽&#xff09;&#xff0c;此时就需要自己用魔法下载好对应文件&#xff0c;然后替换到fastapi里面去。 fastapi里面依靠这…

java学习part07数组工具类

1比较内容 2输出信息 3值填充 4快速排序 5二分查找 负数没找到&#xff0c;其他表示下标