public function find(Query $query, $type, array $languageFilter = array())
{
$aggregationList = array_map(array($this->facetBuilderVisitor, 'visit'), $query->facetBuilders);
$aggregations = array();
foreach ($aggregationList as $aggregation) {
$aggregations[key($aggregation)] = reset($aggregation);
}
$ast = array('query' => array('filtered' => array('query' => array($this->criterionVisitorDispatcher->dispatch($query->query, CriterionVisitorDispatcher::CONTEXT_QUERY, $languageFilter)), 'filter' => array($this->criterionVisitorDispatcher->dispatch($query->filter, CriterionVisitorDispatcher::CONTEXT_FILTER, $languageFilter)))), 'aggregations' => empty($aggregations) ? new ArrayObject() : $aggregations, 'sort' => array_map(array($this->sortClauseVisitor, 'visit'), $query->sortClauses), 'track_scores' => true, 'from' => $query->offset, 'size' => $query->limit);
$response = $this->findRaw(json_encode($ast), $type);
// TODO: error handling
$data = json_decode($response->body);
return $data;
}