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

Added edismax support, including unittests and examples

parent ef470657
<?php
require('init.php');
htmlHeader();
// create a client instance
$client = new Solarium_Client($config);
// get a select query instance
$query = $client->createSelect();
// get the dismax component and set a boost query
$dismax = $query->getDisMax();
// override the default setting of 'dismax' to enable 'edismax'
$dismax->setQueryParser('edismax');
// this query is now a dismax query
$query->setQuery('memory -printer');
// this executes the query and returns the result
$resultset = $client->select($query);
// display the total number of documents found by solr
echo 'NumFound: '.$resultset->getNumFound();
// show documents using the resultset iterator
foreach ($resultset as $document) {
echo '<hr/><table>';
// the documents are also iterable, to get all fields
foreach($document AS $field => $value)
{
// this converts multivalue fields to a comma-separated string
if(is_array($value)) $value = implode(', ', $value);
echo '<tr><th>' . $field . '</th><td>' . $value . '</td></tr>';
}
echo '</table>';
}
htmlFooter();
\ No newline at end of file
...@@ -43,8 +43,9 @@ ...@@ -43,8 +43,9 @@
<li><a href="2.5.2-morelikethis.php">2.5.2 MoreLikeThis</a></li> <li><a href="2.5.2-morelikethis.php">2.5.2 MoreLikeThis</a></li>
<li><a href="2.5.3-highlighting.php">2.5.3 Highlighting</a></li> <li><a href="2.5.3-highlighting.php">2.5.3 Highlighting</a></li>
<li><a href="2.5.4-dismax.php">2.5.4 Dismax</a></li> <li><a href="2.5.4-dismax.php">2.5.4 Dismax</a></li>
<li><a href="2.5.5-grouping-by-field.php">2.5.5 Grouping by field</a></li> <li><a href="2.5.5-edismax.php">2.5.5 Edismax</a></li>
<li><a href="2.5.6-grouping-by-query.php">2.5.6 Grouping by query</a></li> <li><a href="2.5.6-grouping-by-field.php">2.5.5 Grouping by field</a></li>
<li><a href="2.5.7-grouping-by-query.php">2.5.6 Grouping by query</a></li>
</ul> </ul>
<li><a href="2.6-helper-functions.php">2.6 Helper functions</a></li> <li><a href="2.6-helper-functions.php">2.6 Helper functions</a></li>
<li><a href="2.7-query-reuse.php">2.7 Query re-use</a></li> <li><a href="2.7-query-reuse.php">2.7 Query re-use</a></li>
......
...@@ -55,7 +55,7 @@ class Solarium_Client_RequestBuilder_Select_Component_DisMax ...@@ -55,7 +55,7 @@ class Solarium_Client_RequestBuilder_Select_Component_DisMax
public function build($component, $request) public function build($component, $request)
{ {
// enable dismax // enable dismax
$request->addParam('defType', 'dismax'); $request->addParam('defType', $component->getQueryParser());
$request->addParam('q.alt', $component->getQueryAlternative()); $request->addParam('q.alt', $component->getQueryAlternative());
$request->addParam('qf', $component->getQueryFields()); $request->addParam('qf', $component->getQueryFields());
......
...@@ -54,6 +54,15 @@ class Solarium_Query_Select_Component_DisMax extends Solarium_Query_Select_Compo ...@@ -54,6 +54,15 @@ class Solarium_Query_Select_Component_DisMax extends Solarium_Query_Select_Compo
*/ */
protected $_type = Solarium_Query_Select::COMPONENT_DISMAX; protected $_type = Solarium_Query_Select::COMPONENT_DISMAX;
/**
* Default options
*
* @var array
*/
protected $_options = array(
'queryparser' => 'dismax',
);
/** /**
* Set QueryAlternative option * Set QueryAlternative option
* *
...@@ -276,4 +285,27 @@ class Solarium_Query_Select_Component_DisMax extends Solarium_Query_Select_Compo ...@@ -276,4 +285,27 @@ class Solarium_Query_Select_Component_DisMax extends Solarium_Query_Select_Compo
return $this->getOption('boostfunctions'); return $this->getOption('boostfunctions');
} }
/**
* Set QueryParser option
*
* Can be used to enable edismax
*
* @param string $parser
* @return Solarium_Query_Select_Component_DisMax Provides fluent interface
*/
public function setQueryParser($parser)
{
return $this->_setOption('queryparser', $parser);
}
/**
* Get QueryParser option
*
* @return string
*/
public function getQueryParser()
{
return $this->getOption('queryparser');
}
} }
\ No newline at end of file
...@@ -38,6 +38,7 @@ class Solarium_Client_RequestBuilder_Select_Component_DisMaxTest extends PHPUnit ...@@ -38,6 +38,7 @@ class Solarium_Client_RequestBuilder_Select_Component_DisMaxTest extends PHPUnit
$request = new Solarium_Client_Request(); $request = new Solarium_Client_Request();
$component = new Solarium_Query_Select_Component_DisMax(); $component = new Solarium_Query_Select_Component_DisMax();
$component->setQueryParser('dummyparser');
$component->setQueryAlternative('test'); $component->setQueryAlternative('test');
$component->setQueryFields('content,name'); $component->setQueryFields('content,name');
$component->setMinimumMatch('75%'); $component->setMinimumMatch('75%');
...@@ -52,7 +53,7 @@ class Solarium_Client_RequestBuilder_Select_Component_DisMaxTest extends PHPUnit ...@@ -52,7 +53,7 @@ class Solarium_Client_RequestBuilder_Select_Component_DisMaxTest extends PHPUnit
$this->assertEquals( $this->assertEquals(
array( array(
'defType' => 'dismax', 'defType' => 'dummyparser',
'q.alt' => 'test', 'q.alt' => 'test',
'qf' => 'content,name', 'qf' => 'content,name',
'mm' => '75%', 'mm' => '75%',
......
...@@ -45,6 +45,7 @@ class Solarium_Query_Select_Component_DisMaxTest extends PHPUnit_Framework_TestC ...@@ -45,6 +45,7 @@ class Solarium_Query_Select_Component_DisMaxTest extends PHPUnit_Framework_TestC
public function testConfigMode() public function testConfigMode()
{ {
$options = array( $options = array(
'queryparser' => 'edismax',
'queryalternative' => '*:*', 'queryalternative' => '*:*',
'queryfields' => 'title^2.0 description', 'queryfields' => 'title^2.0 description',
'minimummatch' => '2.0', 'minimummatch' => '2.0',
...@@ -58,6 +59,7 @@ class Solarium_Query_Select_Component_DisMaxTest extends PHPUnit_Framework_TestC ...@@ -58,6 +59,7 @@ class Solarium_Query_Select_Component_DisMaxTest extends PHPUnit_Framework_TestC
$this->_disMax->setOptions($options); $this->_disMax->setOptions($options);
$this->assertEquals($options['queryparser'], $this->_disMax->getQueryParser());
$this->assertEquals($options['queryalternative'], $this->_disMax->getQueryAlternative()); $this->assertEquals($options['queryalternative'], $this->_disMax->getQueryAlternative());
$this->assertEquals($options['queryfields'], $this->_disMax->getQueryFields()); $this->assertEquals($options['queryfields'], $this->_disMax->getQueryFields());
$this->assertEquals($options['minimummatch'], $this->_disMax->getMinimumMatch()); $this->assertEquals($options['minimummatch'], $this->_disMax->getMinimumMatch());
...@@ -77,6 +79,17 @@ class Solarium_Query_Select_Component_DisMaxTest extends PHPUnit_Framework_TestC ...@@ -77,6 +79,17 @@ class Solarium_Query_Select_Component_DisMaxTest extends PHPUnit_Framework_TestC
); );
} }
public function testSetAndGetQueryParser()
{
$value = 'dummyparser';
$this->_disMax->setQueryParser($value);
$this->assertEquals(
$value,
$this->_disMax->getQueryParser()
);
}
public function testSetAndGetQueryAlternative() public function testSetAndGetQueryAlternative()
{ {
$value = '*:*'; $value = '*:*';
......
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