public function setUp()
 {
     $this->_parser = new Solarium_Client_ResponseParser_Select_Component_Grouping();
     $this->_query = new Solarium_Query_Select();
     $this->_grouping = $this->_query->getGrouping();
     $this->_grouping->addField('fieldA');
     $this->_grouping->addQuery('cat:1');
     $data = array('grouped' => array('fieldA' => array('matches' => 25, 'ngroups' => 12, 'groups' => array(array('groupValue' => 'test value', 'doclist' => array('numFound' => 13, 'docs' => array(array('id' => 1, 'name' => 'test')))))), 'cat:1' => array('matches' => 40, 'doclist' => array('numFound' => 22, 'docs' => array(array('id' => 2, 'name' => 'dummy2'), array('id' => 5, 'name' => 'dummy5'))))));
     $this->_result = $this->_parser->parse($this->_query, $this->_grouping, $data);
 }
Esempio n. 2
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);
 }
Esempio n. 3
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());
     $request->addParam('group.truncate', $component->getTruncate());
     return $request;
 }
 public function testBuild()
 {
     $builder = new Solarium_Client_RequestBuilder_Select_Component_Grouping();
     $request = new Solarium_Client_Request();
     $component = new Solarium_Query_Select_Component_Grouping();
     $component->setFields(array('fieldA', 'fieldB'));
     $component->setQueries(array('cat:1', 'cat:2'));
     $component->setLimit(12);
     $component->setOffset(2);
     $component->setSort('score desc');
     $component->setMainResult(true);
     $component->setNumberOfGroups(false);
     $component->setCachePercentage(50);
     $request = $builder->build($component, $request);
     $this->assertEquals(array('group' => 'true', 'group.field' => array('fieldA', 'fieldB'), 'group.query' => array('cat:1', 'cat:2'), 'group.limit' => 12, 'group.offset' => 2, 'group.sort' => 'score desc', 'group.main' => 'true', 'group.ngroups' => 'false', 'group.cache.percent' => 50), $request->getParams());
 }
 public function testSetAndGetCachePercentage()
 {
     $value = 40;
     $this->_grouping->setCachePercentage($value);
     $this->assertEquals($value, $this->_grouping->getCachePercentage());
 }
Esempio n. 6
0
 public function testSetAndGetTruncate()
 {
     $value = true;
     $this->_grouping->setTruncate($value);
     $this->assertEquals($value, $this->_grouping->getTruncate());
 }