/** * 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); }
/** * Parse result data into result objects * * @param Solarium_Query_Select $query * @param Solarium_Query_Select_Component_MoreLikeThis $moreLikeThis * @param array $data * @return Solarium_Result_Select_MoreLikeThis */ public function parse($query, $moreLikeThis, $data) { $results = array(); if (isset($data['moreLikeThis'])) { $documentClass = $query->getOption('documentclass'); $searchResults = $data['moreLikeThis']; foreach ($searchResults as $key => $result) { // create document instances $docs = array(); foreach ($result['docs'] as $fields) { $docs[] = new $documentClass($fields); } $results[$key] = new Solarium_Result_Select_MoreLikeThis_Result($result['numFound'], $result['maxScore'], $docs); } } return new Solarium_Result_Select_MoreLikeThis($results); }