Opensearch/ElasticSearch-ctx查询内容不全的问题

问题

在OpenSearch中,我希望在action中把一整条log作为报警内容发送出来,但是根据文档,配置为ctx.results.0.hits.hits.0._source.log,但是发现根本找不到这个值

经过查询,我发现在返回的ctx中仅存在如下的值

复制代码
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=}}

没有我需要的

查询语句为

复制代码
{
    "size": 0,
    "query": {
        "bool": {
            "filter": [
                {
                    "range": {
                        "@timestamp": {
                            "from": "{{period_end}}||-1d",
                            "to": "{{period_end}}",
                            "include_lower": true,
                            "include_upper": true,
                            "format": "epoch_millis",
                            "boost": 1
                        }
                    }
                },
                {
                    "query_string": {
                        "query": "*BATCHMONITORING*",
                        "default_field": "log",
                        "fields": [],
                        "type": "best_fields",
                        "default_operator": "or",
                        "max_determinized_states": 10000,
                        "enable_position_increments": true,
                        "fuzziness": "AUTO",
                        "fuzzy_prefix_length": 0,
                        "fuzzy_max_expansions": 50,
                        "phrase_slop": 0,
                        "escape": false,
                        "auto_generate_synonyms_phrase_query": true,
                        "fuzzy_transpositions": true,
                        "boost": 1
                    }
                }
            ],
            "adjust_pure_negative": true,
            "boost": 1
        }
    }
}

解决方案

经过查询,我发现问题存在于size这个参数

size: 这指定了返回的文档数量。在这里设为 0 表示只返回匹配的聚合结果,而不返回实际的文档内容。

我这边把size:0从查询语句中删除后,返回的结果终于包含了我需要的参数

其他参数解释

  • query: 这是查询的主体,使用布尔查询(bool query),允许将多个过滤条件组合在一起。
  • bool : 布尔查询允许组合多个查询子句,如 filtermustmust_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 操作符,表示任何一个关键字匹配即可。
    • 其他参数如 fuzzinessphrase_slop 等是调整查询行为的参数,如自动模糊匹配、短语搜索等。
  • adjust_pure_negative : 设置为 true,表示查询结果中不包含全负匹配的文档。
  • boost : 设置为 1,表示默认的查询权重。
相关推荐
CeshirenTester6 小时前
计算机专业找工作别再乱投:100家常见目标公司,先按赛道分清楚,然后闭眼冲!
大数据·人工智能
sssjjww6 小时前
服务器不同路径下找conda
linux·运维·服务器
Jeremy_Lee1236 小时前
Claude Code + OpenSpec + Everything Claude Code AI 协同开发实战指南
人工智能·elasticsearch·everything
Rubin智造社6 小时前
OpenClaw实操指南20|记忆系统实战:别让你的AI用完就忘,短期+长期记忆配置指南
大数据·人工智能·用户画像·长期记忆·记忆系统·memory.md·openclaw实操
李兆龙的博客6 小时前
从一到无穷大 #68 Agent Memory 全景:大模型智能体记忆机制的形态、动态与前沿
大数据·人工智能·算法
七夜zippoe6 小时前
OpenClaw 定时任务与自动化:Cron 详解
运维·人工智能·自动化·cron·openclaw
xcbrand7 小时前
地产建筑品牌策划公司哪家强
大数据·人工智能·python
keyipatience7 小时前
4.5 Linux指令和权限
linux·运维·服务器
keyipatience7 小时前
6.linux权限
linux·运维·服务器
biaotan10287 小时前
销售实用工具合集:全流程提效,轻松做好客户与业绩
大数据