elasticsearch如何过滤后取出指定字段值

比如我按照filter条件过滤到数据后,需要取出src_ip,dst_type,src_branch这些字段,如何在aggs里面通过过滤条件只取出这连个字段的数据呢
类似于sql中的
select name,sex score from student where home='china'

阅读 1.3k
评论
    3 个回答
    • 939

    要求查询结果只返回指定字段,在body顶层添加_source选项,以数组形式指定要返回的字段:

    "query": {
        ...
    },
    "_source": ["src_ip", "dst_type", "src_branch"]

    那么返回的hits.hits中的每个文档的_source将只包含src_ip, dst_typesrc_branch这三个字段

    要求聚合结果只返回指定字段(通常只有top_hits等少数返回原始文档的聚合指标才有类似需求),在该bucket/metric的顶层添加_source选项,以数组形式指定要返回的字段:

    "query": {
        ...
    },
    {
        "aggs": {
            "foobar": {
                "terms": {"field": "xxx"},
                "aggs": {
                    "top3": {
                        "top_hits": {
                            "_source": {
                                "includes": ["src_ip", "dst_type", "src_branch"]
                            },
                            "size": 3
                        }
                    }
                }
            }
        }
    },
    "size": 0

    那么返回的聚合结果foobar.top3中的每个文档将只包含src_ip, dst_typesrc_branch这三个字段

      "_source":["src_ip","dst_type","src_branch"]
            网上查了下,找到了,类似于这样
            "query":{
            "bool":{
            "must":{
            "term":{
            "rule_major_type":1,
            },
            "terms":{
            "rule_minor_type":[1,2,3,4]
            },
            "term":{
            "dst_type":1
            },
            "terms":{
            dst_branch_id:2
            }
            }
            }
            "aggs":{
            "xxx":{
            "terms":{
            
            }
            }
            "aggs":{
            "xxx"
            }
            }
            }
          撰写回答

          登录后参与交流、获取后续更新提醒