dedup

dedup 命令根据指定的字段从搜索结果中移除重复的文档。

语法

dedup 命令的语法如下:

dedup [int] <field-list> [keepempty=<bool>] [consecutive=<bool>]

参数

dedup 命令支持以下参数。

参数 必需/可选 描述
<field-list> 必需 用于去重的字段列表,以逗号分隔。至少需要一个字段。
<int> 可选 为每个字段组合保留的重复文档数量。必须大于 0。默认值为 1
keepempty 可选 当设置为 true 时,保留字段列表中任何字段为 NULL 值或缺失的文档。默认值为 false
consecutive 可选 当设置为 true 时,仅移除连续重复的文档。默认值为 false。需要启用旧版 SQL 引擎 (plugins.calcite.enabled=false)。

示例 1:基于单个字段移除重复项

以下查询基于 gender 字段对文档进行去重:

source=accounts
| dedup gender
| fields account_number, gender
| sort account_number

查询返回以下结果:

account_number gender
1 M
13 F

示例 2:保留多个重复文档

以下查询基于 gender 字段移除重复文档,但同时保留两个重复项:

source=accounts
| dedup 2 gender
| fields account_number, gender
| sort account_number

查询返回以下结果:

account_number gender
1 M
6 M
13 F

示例 3:处理具有空字段值的文档

以下查询在去重的同时,保留指定字段为 null 值的文档:

source=accounts
| dedup email keepempty=true
| fields account_number, email
| sort account_number

查询返回以下结果:

account_number email
1 amberduke@pyrami.com
6 hattiebond@netagy.com
13 null
18 daleadams@boink.com

以下查询在去重时,忽略指定字段为空值的文档:

source=accounts
| dedup email
| fields account_number, email
| sort account_number

查询返回以下结果:

account_number email
1 amberduke@pyrami.com
6 hattiebond@netagy.com
18 daleadams@boink.com

示例 4:对连续文档进行去重

以下查询移除连续重复的文档:

source=accounts
| dedup gender consecutive=true
| fields account_number, gender
| sort account_number

查询返回以下结果:

account_number gender
1 M
13 F
18 M