示例#1
0
 /**
  * Add request settings for the debug component
  *
  * @param Solarium_Query_Select_Component_Debug $component
  * @param Solarium_Client_Request $request
  * @return Solarium_Client_Request
  */
 public function build($component, $request)
 {
     $request->addParam('debugQuery', 'true');
     $request->addParam('debug.explain.structured', 'true');
     $request->addParam('explainOther', $component->getExplainOther());
     return $request;
 }
示例#2
0
 /**
  * Build request for an analysis query
  *
  * @param Solarium_Query_Analysis $query
  * @return Solarium_Client_Request
  */
 public function build($query)
 {
     $request = new Solarium_Client_Request();
     $request->setHandler($query->getHandler());
     $request->addParam('wt', 'json');
     $request->addParam('analysis.query', $query->getQuery());
     $request->addParam('analysis.showmatch', $query->getShowMatch());
     return $request;
 }
 /**
  * Add request settings for DistributedSearch
  *
  * @param Solarium_Query_Select_Component_DistributedSearch $component
  * @param Solarium_Client_Request $request
  * @return Solarium_Client_Request
  */
 public function build($component, $request)
 {
     // add shard fields to request
     $shards = array_values($component->getShards());
     if (count($shards)) {
         $request->addParam('shards', implode(',', $shards));
     }
     $request->addParam('shards.qt', $component->getShardRequestHandler());
     return $request;
 }
示例#4
0
 /**
  * Add request settings for Dismax
  *
  * @param Solarium_Query_Select_Component_Dismax $component
  * @param Solarium_Client_Request $request
  * @return Solarium_Client_Request
  */
 public function buildComponent($component, $request)
 {
     // enable dismax
     $request->addParam('defType', $component->getQueryParser());
     $request->addParam('q.alt', $component->getQueryAlternative());
     $request->addParam('qf', $component->getQueryFields());
     $request->addParam('mm', $component->getMinimumMatch());
     $request->addParam('pf', $component->getPhraseFields());
     $request->addParam('ps', $component->getPhraseSlop());
     $request->addParam('qs', $component->getQueryPhraseSlop());
     $request->addParam('tie', $component->getTie());
     $request->addParam('bq', $component->getBoostQuery());
     $request->addParam('bf', $component->getBoostFunctions());
     return $request;
 }
示例#5
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;
 }
示例#6
0
 public function testAddParamOverwrite()
 {
     $params = array('param1' => 1);
     $this->_request->setParams($params);
     $this->_request->addParam('param1', 2, true);
     $this->assertEquals(array('param1' => 2), $this->_request->getParams());
 }
示例#7
0
 /**
  * Build request for a ping query
  *
  * @param Solarium_Query_Ping $query
  * @return Solarium_Client_Request
  */
 public function build($query)
 {
     $request = new Solarium_Client_Request();
     $request->setHandler($query->getHandler());
     $request->setMethod(Solarium_Client_Request::METHOD_GET);
     $request->addParam('wt', 'json');
     return $request;
 }
 /**
  * Build request for a select query
  *
  * @param Solarium_Query $query
  * @return Solarium_Client_Request
  */
 public function build($query)
 {
     $request = new Solarium_Client_Request();
     $request->setHandler($query->getHandler());
     $request->addParams($query->getParams());
     $request->addParam('wt', 'json');
     return $request;
 }
示例#9
0
 /**
  * Add request settings for the stats component
  *
  * @param Solarium_Query_Select_Component_Stats $component
  * @param Solarium_Client_Request $request
  * @return Solarium_Client_Request
  */
 public function build($component, $request)
 {
     // enable stats
     $request->addParam('stats', 'true');
     // add fields
     foreach ($component->getFields() as $field) {
         $request->addParam('stats.field', $field->getKey());
         // add field specific facet stats
         foreach ($field->getFacets() as $facet) {
             $request->addParam('f.' . $field->getKey() . '.stats.facet', $facet);
         }
     }
     // add facet stats for all fields
     foreach ($component->getFacets() as $facet) {
         $request->addParam('stats.facet', $facet);
     }
     return $request;
 }
示例#10
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');
     $request->addParam('q.op', $query->getQueryDefaultOperator());
     $request->addParam('df', $query->getQueryDefaultField());
     // 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;
 }
示例#11
0
 /**
  * Add request settings for Spellcheck
  *
  * @param Solarium_Query_Select_Component_Spellcheck $component
  * @param Solarium_Client_Request $request
  * @return Solarium_Client_Request
  */
 public function buildComponent($component, $request)
 {
     // enable spellcheck
     $request->addParam('spellcheck', 'true');
     $request->addParam('spellcheck.q', $component->getQuery());
     $request->addParam('spellcheck.build', $component->getBuild());
     $request->addParam('spellcheck.reload', $component->getReload());
     $request->addParam('spellcheck.dictionary', $component->getDictionary());
     $request->addParam('spellcheck.count', $component->getCount());
     $request->addParam('spellcheck.onlyMorePopular', $component->getOnlyMorePopular());
     $request->addParam('spellcheck.extendedResults', $component->getExtendedResults());
     $request->addParam('spellcheck.collate', $component->getCollate());
     $request->addParam('spellcheck.maxCollations', $component->getMaxCollations());
     $request->addParam('spellcheck.maxCollationTries', $component->getMaxCollationTries());
     $request->addParam('spellcheck.maxCollationEvaluations', $component->getMaxCollationEvaluations());
     $request->addParam('spellcheck.collateExtendedResults', $component->getCollateExtendedResults());
     $request->addParam('spellcheck.accuracy', $component->getAccuracy());
     return $request;
 }
示例#12
0
 /**
  * Event hook to customize the request object
  *
  * @param Solarium_Query $query
  * @param Solarium_Client_Request $request
  * @return void
  */
 public function postCreateRequest($query, $request)
 {
     foreach ($this->getCustomizations() as $key => $customization) {
         // first validate
         if (!$customization->isValid()) {
             throw new Solarium_Exception('Request customization with key "' . $key . '" is invalid');
         }
         // apply to request, depending on type
         switch ($customization->getType()) {
             case Solarium_Plugin_CustomizeRequest_Customization::TYPE_PARAM:
                 $request->addParam($customization->getName(), $customization->getValue(), $customization->getOverwrite());
                 break;
             case Solarium_Plugin_CustomizeRequest_Customization::TYPE_HEADER:
                 $request->addHeader($customization->getName() . ': ' . $customization->getValue());
                 break;
         }
         // remove single-use customizations after use
         if (!$customization->getPersistent()) {
             $this->removeCustomization($key);
         }
     }
 }
示例#13
0
 /**
  * Add params for a range facet to request
  *
  * @param Solarium_Client_Request $request
  * @param Solarium_Query_Select_Component_Facet_Range $facet
  * @return void
  */
 public function addFacetRange($request, $facet)
 {
     $field = $facet->getField();
     $request->addParam('facet.range', $this->renderLocalParams($field, array('key' => $facet->getKey(), 'ex' => $facet->getExcludes())));
     $request->addParam("f.{$field}.facet.range.start", $facet->getStart());
     $request->addParam("f.{$field}.facet.range.end", $facet->getEnd());
     $request->addParam("f.{$field}.facet.range.gap", $facet->getGap());
     $request->addParam("f.{$field}.facet.range.hardend", $facet->getHardend());
     if (null !== $facet->getOther()) {
         $other = explode(',', $facet->getOther());
         foreach ($other as $otherValue) {
             $request->addParam("f.{$field}.facet.range.other", trim($otherValue));
         }
     }
     if (null !== $facet->getInclude()) {
         $include = explode(',', $facet->getInclude());
         foreach ($include as $includeValue) {
             $request->addParam("f.{$field}.facet.range.include", trim($includeValue));
         }
     }
 }
 /**
  * Add per-field override options to the request
  *
  * @param Solarium_Query_Select_Component_Highlighting_Field $field
  * @param Solarium_Client_Request $request
  * @return void
  */
 protected function _addFieldParams($field, $request)
 {
     $prefix = 'f.' . $field->getName() . '.hl.';
     $request->addParam($prefix . 'snippets', $field->getSnippets());
     $request->addParam($prefix . 'fragsize', $field->getFragSize());
     $request->addParam($prefix . 'mergeContiguous', $field->getMergeContiguous());
     $request->addParam($prefix . 'alternateField', $field->getAlternateField());
     $request->addParam($prefix . 'formatter', $field->getFormatter());
     $request->addParam($prefix . 'simple.pre', $field->getSimplePrefix());
     $request->addParam($prefix . 'simple.post', $field->getSimplePostfix());
     $request->addParam($prefix . 'fragmenter', $field->getFragmenter());
     $request->addParam($prefix . 'useFastVectorHighlighter', $field->getUseFastVectorHighlighter());
 }
 /**
  * Add request settings for morelikethis
  *
  * @param Solarium_Query_Select_Component_MoreLikeThis $component
  * @param Solarium_Client_Request $request
  * @return Solarium_Client_Request
  */
 public function build($component, $request)
 {
     // enable morelikethis
     $request->addParam('mlt', 'true');
     $request->addParam('mlt.fl', $component->getFields());
     $request->addParam('mlt.mintf', $component->getMinimumTermFrequency());
     $request->addParam('mlt.mindf', $component->getMinimumDocumentFrequency());
     $request->addParam('mlt.minwl', $component->getMinimumWordLength());
     $request->addParam('mlt.maxwl', $component->getMaximumWordLength());
     $request->addParam('mlt.maxqt', $component->getMaximumQueryTerms());
     $request->addParam('mlt.maxntp', $component->getMaximumNumberOfTokens());
     $request->addParam('mlt.boost', $component->getBoost());
     $request->addParam('mlt.qf', $component->getQueryFields());
     $request->addParam('mlt.count', $component->getCount());
     return $request;
 }
示例#16
0
 /**
  * Add request settings for Highlighting
  *
  * @param Solarium_Query_Select_Component_Highlighting $component
  * @param Solarium_Client_Request $request
  * @return Solarium_Client_Request
  */
 public function build($component, $request)
 {
     // enable highlighting
     $request->addParam('hl', 'true');
     $request->addParam('hl.fl', $component->getFields());
     $request->addParam('hl.snippets', $component->getSnippets());
     $request->addParam('hl.fragsize', $component->getFragSize());
     $request->addParam('hl.mergeContiguous', $component->getMergeContiguous());
     $request->addParam('hl.requireFieldMatch', $component->getRequireFieldMatch());
     $request->addParam('hl.maxAnalyzedChars', $component->getMaxAnalyzedChars());
     $request->addParam('hl.alternateField', $component->getAlternateField());
     $request->addParam('hl.maxAlternateFieldLength', $component->getMaxAlternateFieldLength());
     $request->addParam('hl.formatter', $component->getFormatter());
     $request->addParam('hl.simple.pre', $component->getSimplePrefix());
     $request->addParam('hl.simple.post', $component->getSimplePostfix());
     $request->addParam('hl.fragmenter', $component->getFragmenter());
     $request->addParam('hl.fragListBuilder', $component->getFragListBuilder());
     $request->addParam('hl.fragmentsBuilder', $component->getFragmentsBuilder());
     $request->addParam('hl.useFastVectorHighlighter', $component->getUseFastVectorHighlighter());
     $request->addParam('hl.usePhraseHighlighter', $component->getUsePhraseHighlighter());
     $request->addParam('hl.highlightMultiTerm', $component->getHighlightMultiTerm());
     $request->addParam('hl.regex.slop', $component->getRegexSlop());
     $request->addParam('hl.regex.pattern', $component->getRegexPattern());
     $request->addParam('hl.regex.maxAnalyzedChars', $component->getRegexMaxAnalyzedChars());
     return $request;
 }
示例#17
0
 /**
  * Build request for a Terms query
  *
  * @param Solarium_Query_Terms $query
  * @return Solarium_Client_Request
  */
 public function build($query)
 {
     $request = new Solarium_Client_Request();
     $request->setHandler($query->getHandler());
     $request->addParam('terms', true);
     $request->addParam('wt', 'json');
     $request->addParam('terms.lower', $query->getLowerbound());
     $request->addParam('terms.lower.incl', $query->getLowerboundInclude());
     $request->addParam('terms.mincount', $query->getMinCount());
     $request->addParam('terms.maxcount', $query->getMaxCount());
     $request->addParam('terms.prefix', $query->getPrefix());
     $request->addParam('terms.regex', $query->getRegex());
     $request->addParam('terms.limit', $query->getLimit());
     $request->addParam('terms.upper', $query->getUpperbound());
     $request->addParam('terms.upper.incl', $query->getUpperboundInclude());
     $request->addParam('terms.raw', $query->getRaw());
     $request->addParam('terms.sort', $query->getSort());
     $fields = explode(',', $query->getFields());
     foreach ($fields as $field) {
         $request->addParam('terms.fl', trim($field));
     }
     if ($query->getRegexFlags() !== null) {
         $flags = explode(',', $query->getRegexFlags());
         foreach ($flags as $flag) {
             $request->addParam('terms.regex.flag', trim($flag));
         }
     }
     return $request;
 }