问题
在OpenSearch中,我希望在action中把一整条log作为报警内容发送出来,但是根据文档,配置为ctx.results.0.hits.hits.0._source.log,但是发现根本找不到这个值
经过查询,我发现在返回的ctx中仅存在如下的值
| 1 | results=[, hits=, max_score=null}, took=13, timed_out=false}], periodStart=2024-07-08T08:30:07.425Z, periodEnd=2024-07-08T08:31:07.425Z, error=null, trigger={id=GkWmgZABvp-0qNhTa6Rs, name=Test alarm, please ignore, severity=3, actions=[{name=Test alarm, please ignore}]}, alert={acknowledged_time=null, id=sHdKkZABDnp5EchiGRFG, version=-1, end_time=null, error_message=null, execution_id=HEWmgZABvp-0qNhTa6R5_2024-07-08T07:41:09.151397924_6ca4e795-58a9-489d-85fe-74c4bbf2d9ab, workflow_id=, workflow_name=, associated_alert_ids=[], last_notification_time=1720426150054, severity=3, start_time=1720424470852, state=ACTIVE, bucket_keys=null, parent_bucket_path=null, finding_ids=, related_doc_ids=}} | 
没有我需要的
查询语句为
| 1 | { | 
解决方案
经过查询,我发现问题存在于size这个参数
size: 这指定了返回的文档数量。在这里设为 0 表示只返回匹配的聚合结果,而不返回实际的文档内容。
我这边把size:0从查询语句中删除后,返回的结果终于包含了我需要的参数
其他参数解释
- query: 这是查询的主体,使用布尔查询(bool query),允许将多个过滤条件组合在一起。
- bool: 布尔查询允许组合多个查询子句,如 filter、must、must_not等。
- filter: 这是一个过滤器子句,它包含了两个过滤条件。
- range: 范围查询,用于限制 @timestamp字段的范围。具体来说:- "from": "{{period_end}}||-1d":表示从- period_end变量指定的时间开始,向前推一天。- {{period_end}}是一个模板变量,在实际执行时会被具体的时间值替换。
- "to": "{{period_end}}":表示到- period_end变量指定的时间结束。
- "format": "epoch_millis":指定时间格式为毫秒级时间戳。
- "include_lower": true, "include_upper": true:包括上下界值。
 
- query_string: 查询字符串查询,用于搜索包含指定关键字的文档。- "query": "*BATCHMONITORING*":这里的查询字符串是通配符形式,表示搜索包含 “BATCHMONITORING” 关键字的文档。
- "default_field": "log":指定默认搜索字段为 “log”。
- "default_operator": "or":默认操作符为 OR 操作符,表示任何一个关键字匹配即可。
- 其他参数如 fuzziness、phrase_slop等是调整查询行为的参数,如自动模糊匹配、短语搜索等。
 
- adjust_pure_negative: 设置为 true,表示查询结果中不包含全负匹配的文档。
- boost: 设置为 1,表示默认的查询权重。
 
         
              