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 @@
* @subpackage Client
*/
class Solarium_Client_RequestBuilder_MoreLikeThis
extends Solarium_Client_RequestBuilder
extends Solarium_Client_RequestBuilder_Select
{
/**
* Build request for a MoreLikeThis query
*
* @param Solarium_Query_Select $query
* @param Solarium_Query_MoreLikeThis $query
* @return Solarium_Client_Request
*/
public function build($query)
{
$request = new Solarium_Client_Request;
$request->setHandler($query->getHandler());
$request = parent::build($query);
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()));
// add mlt params to request
$request->addParam('mlt.interestingTerms', $query->getInterestingTerms());
$request->addParam('mlt.match.include', $query->getMatchInclude());
$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
$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);
}
// convert query to stream if necessary
if (true === $query->getQueryStream()) {
$request->removeParam('q');
$request->setRawData($query->getQuery());
$request->setMethod(Solarium_Client_Request::METHOD_POST);
$request->addHeader('Content-Type: text/plain; charset=utf-8');
}
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