按查询更新
1.0 版引入
您可以在更新请求中包含查询和脚本,这样 OpenSearch 就可以运行该脚本来更新所有匹配查询的文档。
端点
POST <index1>, <index2>/_update_by_query
路径参数
参数 | 类型 | 描述 |
---|---|---|
<index> | 字符串 | 要更新的索引的逗号分隔列表。要更新所有索引,请使用 * 或省略此参数。 |
查询参数
所有参数都是可选的。
参数 | 类型 | 描述 |
---|---|---|
allow_no_indices | 布尔型 | 是否忽略不匹配任何索引的通配符。默认值为 true 。 |
分析器 | 字符串 | 查询字符串中使用的分析器。 |
analyze_wildcard | 布尔型 | 更新操作是否应在分析中包含通配符和前缀查询。默认为 false 。 |
conflicts | 字符串 | 指示 OpenSearch 在按查询更新操作遇到版本冲突时应如何处理。有效选项为 abort 和 proceed 。默认为 abort 。 |
default_operator | 字符串 | 指示字符串查询的默认运算符应为 AND 还是 OR 。默认为 OR 。 |
df | 字符串 | 如果在查询字符串中未提供字段前缀,则为默认字段。 |
expand_wildcards | 字符串 | 指定通配符表达式可以匹配的索引类型。支持逗号分隔值。有效值为 all (匹配任何索引)、open (匹配开放的、非隐藏的索引)、closed (匹配封闭的、非隐藏的索引)、hidden (匹配隐藏索引)和 none (拒绝通配符表达式)。默认为 open 。 |
from | 整数 | 开始搜索的起始索引。默认值为 0。 |
ignore_unavailable | 布尔型 | 是否在响应中排除缺失或已关闭的索引,并在搜索请求期间忽略不可用的分片。默认为 false 。 |
lenient | 布尔型 | 指定 OpenSearch 是否应接受查询存在格式错误(例如,查询文本字段时使用整数)的请求。默认值为 false 。 |
max_docs | 整数 | 按查询更新操作最多应处理的文档数量。默认为所有文档。 |
pipeline | 字符串 | 用于处理文档的管道 ID。 |
preference | 字符串 | 指定 OpenSearch 应在哪个分片或节点上执行按查询更新操作。 |
q | 字符串 | Lucene 查询字符串的查询。 |
request_cache | 布尔型 | 指定 OpenSearch 是否应使用请求缓存。默认值为索引设置中是否启用它。 |
refresh | 布尔型 | 如果为 true,OpenSearch 会刷新分片,使按查询更新操作对搜索结果可用。有效选项为 true 和 false 。默认为 false 。 |
requests_per_second | 整数 | 指定请求的节流,以每秒子请求数表示。默认值为 -1,表示不节流。 |
路由 | 字符串 | 用于将按查询更新操作路由到特定分片的值。 |
scroll | 时间 | 搜索上下文保持打开的时间。 |
scroll_size | 整数 | 操作的滚动请求大小。默认为 1000。 |
search_type | 字符串 | OpenSearch 是否应使用全局术语和文档频率来计算相关性分数。有效选项为 query_then_fetch 和 dfs_query_then_fetch 。query_then_fetch 使用分片的本地术语和文档频率对文档进行评分。它通常更快但准确性较低。dfs_query_then_fetch 使用所有分片的全局术语和文档频率对文档进行评分。它通常较慢但更准确。默认为 query_then_fetch 。 |
search_timeout | 时间 | 等待 OpenSearch 认为请求超时的时间。默认为无超时。 |
slices | 字符串或整数 | 将操作拆分为的切片数量,由整数指定。当设置为 auto 时,OpenSearch 会自行决定操作的切片数量。默认为 1 ,表示操作不会被拆分。 |
sort(排序) | 列表 | 要排序的 |
_source | 字符串 | 是否在响应中包含 _source 字段。 |
_source_excludes | 字符串 | 要从响应中排除的源字段的逗号分隔列表。 |
_source_includes | 字符串 | 要包含在响应中的源字段的逗号分隔列表。 |
stats | 字符串 | 与请求关联的值,用于额外日志记录。 |
terminate_after | 整数 | OpenSearch 在终止请求前应处理的最大匹配文档数(命中数)。 |
timeout | 时间 | 操作等待活动分片响应的时间。默认为 1m 。 |
version | 布尔型 | 是否将文档版本作为匹配项包含在内。 |
wait_for_active_shards | 字符串 | OpenSearch 执行操作之前必须处于活动状态的分片数量。有效值为 all 或索引中总分片数量的任何整数。默认为 1,即主分片。 |
wait_for_completion | 布尔值 | 当设置为 false 时,响应正文包含一个任务 ID,并且 OpenSearch 会异步执行操作。任务 ID 可用于检查任务状态或取消任务。默认为 true 。 |
请求正文选项
要通过查询更新索引和文档,您必须在请求正文中包含一个 查询 和一个脚本,OpenSearch 可以运行该脚本来更新您的文档。如果您不指定查询,则索引中的所有文档都将被更新。
{
"query": {
"term": {
"oldValue": 20
}
},
"script" : {
"source": "ctx._source.oldValue += params.newValue",
"lang": "painless",
"params" : {
"newValue" : 10
}
}
}
示例请求
POST test-index1/_update_by_query
{
"query": {
"term": {
"oldValue": 10
}
},
"script" : {
"source": "ctx._source.oldValue += params.newValue",
"lang": "painless",
"params" : {
"newValue" : 20
}
}
}
示例响应
{
"took": 21,
"timed_out": false,
"total": 1,
"updated": 1,
"deleted": 0,
"batches": 1,
"version_conflicts": 0,
"noops": 0,
"retries": {
"bulk": 0,
"search": 0
},
"throttled_millis": 0,
"requests_per_second": -1.0,
"throttled_until_millis": 0,
"failures": []
}
响应正文字段
字段 | 描述 |
---|---|
took | OpenSearch 完成操作所需的时间(毫秒)。 |
timed_out | 操作期间是否有任何更新请求超时。 |
total | 已处理文档的总数。 |
updated | 已更新文档的总数。 |
batches | 请求处理的滚动响应次数。 |
version_conflicts | 请求遇到的冲突数量。 |
noops | OpenSearch 在操作期间忽略的更新请求数量。此字段始终返回 0。 |
retries | 批量和搜索重试请求的数量。 |
throttled_millis | 请求期间节流的毫秒数。 |
requests_per_second | 操作期间每秒执行的请求数量。 |
throttled_until_millis | OpenSearch 执行下一个节流请求所需的时间。在按查询更新请求中始终等于 0。 |
failures | 请求期间发生的任何故障。 |