我从elasticsearch开始,并且一直试图进行一些聚合。基本上,我有一个数据集,包含以下形式的数据:
{ "name": "The Chef Restaurant", "city": "New York", "state": "New York", "rating": "GOOD", "type": "Continental" }
现在,我想进行一些汇总,并在一个查询中获得所有的Continental餐馆,Good餐馆,New York餐馆。
请注意,我不希望统计所有类型的餐厅,而只希望统计特定类型的餐厅。而且,这些聚合是相互独立的。就是说,当我说“好”时,我并不一定要它是“大陆”,它可以是意大利语或其他任何东西。
这是我尝试过的:
{ "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 }
我知道这似乎是一个简单的问题,但是我已经坚持了很长时间。任何帮助将不胜感激。
您可以按照以下方式使其按预期方式工作:
{ "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" } } } } } } }