* @license http://github.com/basdenooijer/solarium/raw/master/COPYING * @link http://www.solarium-project.org/ * * @package Solarium * @subpackage Client */ /** * Parse select component Grouping result from the data * * @package Solarium * @subpackage Client */ class Solarium_Client_ResponseParser_Select_Component_Grouping { /** * Parse result data into result objects * * @param Solarium_Query_Select $query * @param Solarium_Query_Select_Component_Grouping $grouping * @param array $data * @return Solarium_Result_Select_Grouping */ public function parse($query, $grouping, $data) { $groups = array(); if (isset($data['grouped'])) { // parse field groups foreach ($grouping->getFields() as $field) { if (isset($data['grouped'][$field])) { $result = $data['grouped'][$field]; $matches = (isset($result['matches'])) ? $result['matches'] : null; $groupCount = (isset($result['ngroups'])) ? $result['ngroups'] : null; $valueGroups = array(); foreach ($result['groups'] as $valueGroupResult) { $value = (isset($valueGroupResult['groupValue'])) ? $valueGroupResult['groupValue'] : null; $numFound = (isset($valueGroupResult['doclist']['numFound'])) ? $valueGroupResult['doclist']['numFound'] : null; $start = (isset($valueGroupResult['doclist']['start'])) ? $valueGroupResult['doclist']['start'] : null; // create document instances $documentClass = $query->getOption('documentclass'); $documents = array(); if (isset($valueGroupResult['doclist']['docs']) && is_array($valueGroupResult['doclist']['docs'])) { foreach ($valueGroupResult['doclist']['docs'] as $doc) { $documents[] = new $documentClass($doc); } } $valueGroups[] = new Solarium_Result_Select_Grouping_ValueGroup( $value, $numFound, $start, $documents ); } $groups[$field] = new Solarium_Result_Select_Grouping_FieldGroup( $matches, $groupCount, $valueGroups ); } } // parse query groups foreach ($grouping->getQueries() as $groupQuery) { if (isset($data['grouped'][$groupQuery])) { $result = $data['grouped'][$groupQuery]; // get statistics $matches = (isset($result['matches'])) ? $result['matches'] : null; $numFound = (isset($result['doclist']['numFound'])) ? $result['doclist']['numFound'] : null; $start = (isset($result['doclist']['start'])) ? $result['doclist']['start'] : null; $maxScore = (isset($result['doclist']['maxScore'])) ? $result['doclist']['maxScore'] : null; // create document instances $documentClass = $query->getOption('documentclass'); $documents = array(); if (isset($result['doclist']['docs']) && is_array($result['doclist']['docs'])) { foreach ($result['doclist']['docs'] as $doc) { $documents[] = new $documentClass($doc); } } // create a group result object $group = new Solarium_Result_Select_Grouping_QueryGroup( $matches, $numFound, $start, $maxScore, $documents ); $groups[$groupQuery] = $group; } } } return new Solarium_Result_Select_Grouping($groups); } }