* @license http://github.com/basdenooijer/solarium/raw/master/COPYING
* @link http://www.solarium-project.org/
*
* @package Solarium
* @subpackage Query
*/
/**
* Distributed Search (sharding) component
*
* @link http://wiki.apache.org/solr/DistributedSearch
*
* @package Solarium
* @subpackage Query
*/
class Solarium_Query_Select_Component_DistributedSearch extends Solarium_Query_Select_Component
{
/**
* Component type
*
* @var string
*/
protected $_type = Solarium_Query_Select::COMPONENT_DISTRIBUTEDSEARCH;
/**
* Request to be distributed across all shards in the list
*
* @var array
*/
protected $_shards = array();
/**
* Initialize options
*
* Several options need some extra checks or setup work, for these options
* the setters are called.
*
* @return void
*/
protected function _init()
{
foreach ($this->_options AS $name => $value) {
switch ($name) {
case 'shards':
$this->setShards($value);
break;
}
}
}
/**
* Add a shard
*
* @param string $key unique string
* @param string $shard The syntax is host:port/base_url
* @return Solarium_Query_Select Provides fluent interface
* @link http://wiki.apache.org/solr/DistributedSearch
*/
public function addShard($key, $shard)
{
$this->_shards[$key] = $shard;
return $this;
}
/**
* Add multiple shards
*
* Example usage:
*
* $client = new Solarium_Client;
* $query = $client->createSelect();
* $distributedSearch = $query->getDistributedSearch();
* $distributedSearch->addShards(array(
* 'core0' => 'localhost:8983/solr/core0',
* 'core1' => 'localhost:8983/solr/core1'
* ));
* $result = $client->select($query);
*
* @param array $shards
* @return Solarium_Query_Select Provides fluent interface
*/
public function addShards(array $shards)
{
foreach ($shards as $key => $shard) {
$this->addShard($key, $shard);
}
return $this;
}
/**
* Remove a shard
*
* @param string $key
* @return Solarium_Query_Select Provides fluent interface
*/
public function removeShard($key)
{
if (isset($this->_shards[$key])) {
unset($this->_shards[$key]);
}
return $this;
}
/**
* Remove all shards
*
* @return Solarium_Query_Select Provides fluent interface
*/
public function clearShards()
{
$this->_shards = array();
return $this;
}
/**
* Set multiple shards
*
* This overwrites any existing shards
*
* Example usage:
*
* $client = new Solarium_Client;
* $query = $client->createSelect();
* $distributedSearch = $query->getDistributedSearch();
* $distributedSearch->setShards(array(
* 'core0' => 'localhost:8983/solr/core0',
* 'core1' => 'localhost:8983/solr/core1'
* ));
* $result = $client->select($query);
*
*
* @param array $shards Associative array of shards
* @return Solarium_Query_Select Provides fluent interface
*/
public function setShards(array $shards)
{
$this->clearShards();
$this->addShards($shards);
return $this;
}
/**
* Get a list of the shards
*
* @return array
*/
public function getShards()
{
return $this->_shards;
}
/**
* A sharded request will go to the standard request handler
* (not necessarily the original); this can be overridden via shards.qt
*
* @param string
* @return Solarium_Query_Select Provides fluent interface
*/
public function setShardRequestHandler($handler)
{
$this->_setOption('shardhandler', $handler);
return $this;
}
/**
* Get a shard request handler (shards.qt)
*
* @param string
* @return Solarium_Query_Select Provides fluent interface
*/
public function getShardRequestHandler()
{
return $this->getOption('shardhandler');
}
}