Commit ad0f9888 authored by Bas de Nooijer's avatar Bas de Nooijer

- added support for all MLT params

- now extends the select query builder to prevent duplicate code
parent 1eaa3a59
...@@ -46,55 +46,39 @@ ...@@ -46,55 +46,39 @@
* @subpackage Client * @subpackage Client
*/ */
class Solarium_Client_RequestBuilder_MoreLikeThis class Solarium_Client_RequestBuilder_MoreLikeThis
extends Solarium_Client_RequestBuilder extends Solarium_Client_RequestBuilder_Select
{ {
/** /**
* Build request for a MoreLikeThis query * Build request for a MoreLikeThis query
* *
* @param Solarium_Query_Select $query * @param Solarium_Query_MoreLikeThis $query
* @return Solarium_Client_Request * @return Solarium_Client_Request
*/ */
public function build($query) public function build($query)
{ {
$request = new Solarium_Client_Request; $request = parent::build($query);
$request->setHandler($query->getHandler());
// add mlt params to request
if ($query->isStream()) {
$request->setRawData($query->getQuery());
$request->setMethod(Solarium_Client_Request::METHOD_POST);
$request->addHeader('Content-Type: text/plain; charset=utf-8');
} else {
$request->addParam('q', $query->getQuery());
}
// add basic params to request
$request->addParam('wt', 'json');
$request->addParam('rows', $query->getRows());
$request->addParam('fl', implode(',', $query->getFields()));
$request->addParam('mlt.interestingTerms', $query->getInterestingTerms()); $request->addParam('mlt.interestingTerms', $query->getInterestingTerms());
$request->addParam('mlt.match.include', $query->getMatchInclude()); $request->addParam('mlt.match.include', $query->getMatchInclude());
$request->addParam('mlt.match.offset', $query->getStart()); $request->addParam('mlt.match.offset', $query->getStart());
$request->addParam('mlt.fl', $query->getMltFields());
$request->addParam('mlt.mintf', $query->getMinimumTermFrequency());
$request->addParam('mlt.mindf', $query->getMinimumDocumentFrequency());
$request->addParam('mlt.minwl', $query->getMinimumWordLength());
$request->addParam('mlt.maxwl', $query->getMaximumWordLength());
$request->addParam('mlt.maxqt', $query->getMaximumQueryTerms());
$request->addParam('mlt.maxntp', $query->getMaximumNumberOfTokens());
$request->addParam('mlt.boost', $query->getBoost());
$request->addParam('mlt.qf', $query->getQueryFields());
// add filterqueries to request // convert query to stream if necessary
$filterQueries = $query->getFilterQueries(); if (true === $query->getQueryStream()) {
if (count($filterQueries) !== 0) { $request->removeParam('q');
foreach ($filterQueries AS $filterQuery) { $request->setRawData($query->getQuery());
$fq = $this->renderLocalParams( $request->setMethod(Solarium_Client_Request::METHOD_POST);
$filterQuery->getQuery(), $request->addHeader('Content-Type: text/plain; charset=utf-8');
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; return $request;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment