2016-04-24 78 views
1

我刚开始使用弹性搜索,并试图进行一些聚合。基本上,我有以下形式组成的数据的数据集:弹性搜索在条件下聚合成存储桶

{ 
    "name": "The Chef Restaurant", 
    "city": "New York", 
    "state": "New York", 
    "rating": "GOOD", 
    "type": "Continental" 
} 

现在,我希望做一些汇总,并得到所有大陆的餐馆,有好的餐馆,餐馆在纽约一个查询。

请注意,我不希望所有类型的餐厅的计数,我只想要特定类型的计数。而且,这些聚合是相互独立的。也就是说,当我说GOOD时,我不一定希望它是Continental,它可以是意大利语或其他任何东西。

这是我曾尝试:

{ 
    "size": 0, 
    "query": { 
     "match_all": {} 
    }, 
    "aggregations": { 
     "good_restaurants": { 
      "filters": { 
       "match": { 
        "rating": "CONTINENTAL" 
       } 
      } 
     }, 
     "continental_restaurants": { 
      "filters": { 
       "match": { 
        "type": "CONTINENTAL" 
       } 
      } 
     }, 
     "restaurants_in_new_york": { 
      "filters": { 
       "match": { 
        "type": "CONTINENTAL" 
       } 
      } 
     } 
    } 
} 

它给我的错误:

{ 
    "error": { 
     "root_cause": [ 
     { 
      "type": "search_parse_exception", 
      "reason": "Unknown key for a START_OBJECT in [good_restaurants]: [match].", 
      "line": 9, 
      "col": 17 
     } 
     ], 
     "type": "search_phase_execution_exception", 
     "reason": "all shards failed", 
     "phase": "query", 
     "grouped": true, 
     "failed_shards": [ 
     { 
      "shard": 0, 
      "index": "test_master", 
      "node": "-aWy78_mRaaBMcOAeiN9tg", 
      "reason": { 
       "type": "search_parse_exception", 
       "reason": "Unknown key for a START_OBJECT in [good_restaurants]: [match].", 
       "line": 9, 
       "col": 17 
      } 
     } 
     ] 
    }, 
    "status": 400 
} 

我知道这似乎是一个简单的问题,但我在它一直停留了很长时间。任何帮助将不胜感激。

回答

1

你可以把它工作,你所期望的方式,这样做是这样的:

{ 
    "size": 0, 
    "query": { 
    "match_all": {} 
    }, 
    "aggregations": { 
    "selected_types": { 
     "filters": { 
     "filters": { 
      "good_restaurants": { 
      "match": { 
       "rating": "CONTINENTAL" 
      } 
      }, 
      "continental_restaurants": { 
      "match": { 
       "type": "CONTINENTAL" 
      } 
      }, 
      "restaurants_in_new_york": { 
      "match": { 
       "type": "CONTINENTAL" 
      } 
      } 
     } 
     } 
    } 
    } 
}