2016-04-24 3 views
1

Я начинаю с поиска эластичных материалов, и я застреваю при попытке сделать некоторую агрегацию. В принципе, у меня есть набор данных, состоящий из данных в следующей форме:Упругий поиск Совокупность в ведрах при условиях

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

Теперь я хочу сделать некоторые агрегации и получить все рестораны 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" 
      } 
      } 
     } 
     } 
    } 
    } 
}