Beispiel #1
0
 /**
  * Configures spellcheck per our desired settings
  * @param Solarium_Query_Select $query
  * @return OnWiki
  */
 protected function registerSpellcheck(Select $query)
 {
     if ($this->service->getGlobal('WikiaSearchSpellcheckActivated')) {
         $query->getSpellcheck()->setQuery($this->config->getQuery()->getSanitizedQuery())->setCollate(true)->setCount(self::SPELLING_RESULT_COUNT)->setMaxCollationTries(self::SPELLING_MAX_COLLATION_TRIES)->setMaxCollations(self::SPELLING_MAX_COLLATIONS)->setExtendedResults(true)->setCollateParam('fq', 'is_content:true AND wid:' . $this->config->getCityId())->setOnlyMorePopular(true)->setCollateExtendedResults(true);
     }
     return $this;
 }
 public function testBuild()
 {
     $query = new Solarium_Query_Select();
     $query->addParam('p1', 'v1');
     $query->addParam('p2', 'v2');
     $request = $this->_builder->build($query);
     $this->assertEquals('select?p1=v1&p2=v2&wt=json', urldecode($request->getUri()));
 }
Beispiel #3
0
 protected function getParamsFromQuery(Solarium_Query_Select $query)
 {
     $params = $query->getParams();
     $dismaxComponent = $query->getComponent(Solarium_Query_Select::COMPONENT_DISMAX);
     foreach ($this->subQueryMethods as $paramKey => $componentMethod) {
         $params[$paramKey] = $dismaxComponent->{$componentMethod}();
     }
     return $params;
 }
 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);
 }
 /**
  * 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);
 }
Beispiel #6
0
 public function getDocuments($type, $filters = false, $groupByParent = false)
 {
     /*
      * Apply filters.
      */
     $query = new Solarium_Query_Select();
     $query->setRows(100);
     $this->_applyFilterQueries($query, $filters);
     /*
      * Construct Mage objects and optionally group them.
      */
     return $this->_constructMageObjects($this->getClient()->select($query), $type, $groupByParent);
 }
 public function testParseWithoutNumFound()
 {
     $data = array('response' => array('docs' => array(array('fieldA' => 1, 'fieldB' => 'Test'), array('fieldA' => 2, 'fieldB' => 'Test2'))), 'responseHeader' => array('status' => 1, 'QTime' => 13));
     $query = new Solarium_Query_Select(array('documentclass' => 'Solarium_Document_ReadWrite'));
     $query->getFacetSet();
     $resultStub = $this->getMock('Solarium_Result_Select', array(), array(), '', false);
     $resultStub->expects($this->once())->method('getData')->will($this->returnValue($data));
     $resultStub->expects($this->once())->method('getQuery')->will($this->returnValue($query));
     $parser = new Solarium_Client_ResponseParser_Select();
     $result = $parser->parse($resultStub);
     $this->assertEquals(1, $result['status']);
     $this->assertEquals(13, $result['queryTime']);
     $this->assertEquals(null, $result['numfound']);
 }
 /**
  * Fetch the next set of results
  *
  * @return void
  */
 protected function _fetchNext()
 {
     $this->_query->setStart($this->_start)->setRows($this->getPrefetch());
     $this->_result = $this->_client->execute($this->_query);
     $this->_documents = $this->_result->getDocuments();
     $this->_start += $this->getPrefetch();
 }
 /**
  * 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);
 }
 protected function _init()
 {
     parent::_init();
     // basic params
     $this->setQuery('*:*');
     $this->setStart(2)->setRows(20);
     $this->setFields(array('id', 'name', 'price'));
     $this->addSort('price', Solarium_Query_Select::SORT_ASC);
     // create a facet field instance and set options
     $facetSet = $this->getFacetSet();
     $facetSet->createFacetField('stock')->setField('inStock');
 }
Beispiel #11
0
 /**
  * Build request for a select query
  *
  * @param Solarium_Query_Select $query
  * @return Solarium_Client_Request
  */
 public function build($query)
 {
     $request = new Solarium_Client_Request();
     $request->setHandler($query->getHandler());
     // add basic params to request
     $request->addParam('q', $query->getQuery());
     $request->addParam('start', $query->getStart());
     $request->addParam('rows', $query->getRows());
     $request->addParam('fl', implode(',', $query->getFields()));
     $request->addParam('wt', 'json');
     // add sort fields to request
     $sort = array();
     foreach ($query->getSorts() as $field => $order) {
         $sort[] = $field . ' ' . $order;
     }
     if (count($sort) !== 0) {
         $request->addParam('sort', implode(',', $sort));
     }
     // add filterqueries to request
     $filterQueries = $query->getFilterQueries();
     if (count($filterQueries) !== 0) {
         foreach ($filterQueries as $filterQuery) {
             $fq = $this->renderLocalParams($filterQuery->getQuery(), array('tag' => $filterQuery->getTags()));
             $request->addParam('fq', $fq);
         }
     }
     // add components to request
     $types = $query->getComponentTypes();
     foreach ($query->getComponents() as $component) {
         $componentBuilderClass = $types[$component->getType()]['requestbuilder'];
         if (!empty($componentBuilderClass)) {
             $componentBuilder = new $componentBuilderClass();
             $request = $componentBuilder->build($component, $request);
         }
     }
     return $request;
 }
Beispiel #12
0
 /**
  * Apply excluded wiki IDs and HOSTs.
  * @param $select \Solarium_Query_Select
  * @return \Solarium_Query_Select
  */
 public function applyFilters(\Solarium_Query_Select $select)
 {
     $blackHostsQuery = $this->getBlacklistedHostsQuery();
     if (!empty($blackHostsQuery)) {
         $select->createFilterQuery('excl')->setQuery($blackHostsQuery);
     }
     $blacklistIdsQuery = $this->getBlacklistedWikiIdsQuery();
     if (!empty($blacklistIdsQuery)) {
         $select->createFilterQuery("widblacklist")->setQuery($blacklistIdsQuery);
     }
     return $select;
 }
Beispiel #13
0
 public function testGetDebug()
 {
     $stats = $this->_query->getDebug();
     $this->assertEquals('Solarium_Query_Select_Component_Debug', get_class($stats));
 }
Beispiel #14
0
 public function testJoinDereferenced()
 {
     $this->assertEquals('{!join from=$deref_1 to=$deref_2}', $this->_helper->join('manu_id', 'id', true));
     $this->assertEquals(array('deref_1' => 'manu_id', 'deref_2' => 'id'), $this->_query->getParams());
 }
 public function testConfigMode()
 {
     $config = array('query' => 'text:mykeyword', 'sort' => array('score' => 'asc'), 'fields' => array('id', 'title', 'category'), 'rows' => 100, 'start' => 200, 'filterquery' => array(array('key' => 'pub', 'tag' => array('pub'), 'query' => 'published:true'), 'online' => array('tag' => 'onl', 'query' => 'online:true')), 'component' => array('facetset' => array('facet' => array(array('type' => 'field', 'key' => 'categories', 'field' => 'category'), 'category13' => array('type' => 'query', 'query' => 'category:13')))), 'resultclass' => 'MyResultClass', 'documentclass' => 'MyDocumentClass');
     $query = new Solarium_Query_Select($config);
     $this->assertEquals($config['query'], $query->getQuery());
     $this->assertEquals($config['sort'], $query->getSorts());
     $this->assertEquals($config['fields'], $query->getFields());
     $this->assertEquals($config['rows'], $query->getRows());
     $this->assertEquals($config['start'], $query->getStart());
     $this->assertEquals($config['documentclass'], $query->getDocumentClass());
     $this->assertEquals($config['resultclass'], $query->getResultClass());
     $this->assertEquals('published:true', $query->getFilterQuery('pub')->getQuery());
     $this->assertEquals('online:true', $query->getFilterQuery('online')->getQuery());
     $facets = $query->getFacetSet()->getFacets();
     $this->assertEquals('category', $facets['categories']->getField());
     $this->assertEquals('category:13', $facets['category13']->getQuery());
     $components = $query->getComponents();
     $this->assertEquals(1, count($components));
     $this->assertThat(array_pop($components), $this->isInstanceOf('Solarium_Query_Select_Component_FacetSet'));
 }
Beispiel #16
0
 /**
  * OO way of grabbing params from query so "components" can add theirs
  * 
  * @param Solarium_Query_Select $query
  * @return array
  */
 protected function getParamsFromQuery(Solarium_Query_Select $query)
 {
     return $query->getParams();
 }
Beispiel #17
0
 public function testWithComponent()
 {
     $this->_query->getDisMax();
     $request = $this->_builder->build($this->_query);
     $this->assertEquals('dismax', $request->getParam('defType'));
 }