Пример #1
0
 /**
  * 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);
 }
Пример #2
0
 /**
  * Add request settings for Grouping
  *
  * @param Solarium_Query_Select_Component_Grouping $component
  * @param Solarium_Client_Request $request
  * @return Solarium_Client_Request
  */
 public function build($component, $request)
 {
     // enable grouping
     $request->addParam('group', 'true');
     $request->addParam('group.field', $component->getFields());
     $request->addParam('group.query', $component->getQueries());
     $request->addParam('group.limit', $component->getLimit());
     $request->addParam('group.offset', $component->getOffset());
     $request->addParam('group.sort', $component->getSort());
     $request->addParam('group.main', $component->getMainResult());
     $request->addParam('group.ngroups', $component->getNumberOfGroups());
     $request->addParam('group.cache.percent', $component->getCachePercentage());
     return $request;
 }
Пример #3
0
 public function testSetAndGetFieldsArray()
 {
     $values = array('fieldD', 'fieldE');
     $this->_grouping->setFields($values);
     $this->assertEquals($values, $this->_grouping->getFields());
 }