Elasticsearch:如何按查询中不包含的字段进行分组?

时间:2014-08-19 08:32:25

标签: group-by elasticsearch

Elasticsearch: 伪码:select all docs that have fieldName=value group by Id 我该如何将其转移到elasticsearch

2 个答案:

答案 0 :(得分:2)

我认为您希望通过Id获取应用过滤器和分组的文档。

以下是示例查询(如sql的智能翻译)

POST index/type/_search 
{
   "query": {
      "filtered": {
         "query": {
            "match_all": {}
         },
         "filter": {
            "term": {
               "fieldname": "vlaue"
            }
         }
      }
   },
   "aggs": {
      "groupById": {
         "terms": {
            "field": "Id",
            "size": 100
         },
         "aggs": {
            "select-all-query": {
               "top_hits": {
                  "size": 100
               }
            }
         }
      }
   }
}

更改要控制的尺寸参数,需要多少文档。

参考

Top Hits aggregation

Terms aggregation

希望这有帮助!!感谢

答案 1 :(得分:1)

你应该看看aggregations

例如,在对具有字段" fieldName"的文档进行过滤之后,此查询按城市分组;包含"值" :

GET /{index}/{type}/_search
{
   "aggs":{
       "filter_by_fieldname":{
           "filter":{
            "term":{
                "fieldName":"value"           
             }
           },
           "aggs":{
                "group_by_city": {
                    "terms": {
                        "field": "city"
                    }
                }                   
           }
       }
    }
}

请注意,默认设置会导致只返回前10个城市(默认大小),但您可以调整它。