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

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

阅读 5.9k
3 个回答

要求查询结果只返回指定字段,在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"
    }
    }
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题