2011-05-02 06:33:05 +02:00
|
|
|
<?php
|
2017-04-21 02:27:01 +02:00
|
|
|
namespace SilverStripe\FullTextSearch\Solr;
|
2011-05-02 06:33:05 +02:00
|
|
|
Solr::include_client_api();
|
2017-02-17 05:37:32 +01:00
|
|
|
use SilverStripe\Core\Config\Config;
|
2017-04-21 02:27:01 +02:00
|
|
|
use \Apache_Solr_Service;
|
2011-05-02 06:33:05 +02:00
|
|
|
|
2013-11-08 01:12:43 +01:00
|
|
|
/**
|
|
|
|
* The API for accessing a specific core of a Solr server. Exactly the same as Apache_Solr_Service for now.
|
|
|
|
*/
|
2015-11-21 07:19:20 +01:00
|
|
|
class SolrService_Core extends Apache_Solr_Service
|
|
|
|
{
|
2013-11-08 01:12:43 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The API for accessing the primary Solr installation, which includes both SolrService_Core,
|
|
|
|
* plus extra methods for interrogating, creating, reloading and getting SolrService_Core instances
|
|
|
|
* for Solr cores.
|
|
|
|
*/
|
2015-11-21 07:19:20 +01:00
|
|
|
class SolrService extends SolrService_Core
|
|
|
|
{
|
|
|
|
private static $core_class = 'SolrService_Core';
|
2011-05-02 06:33:05 +02:00
|
|
|
|
2015-11-21 07:19:20 +01:00
|
|
|
/**
|
|
|
|
* Handle encoding the GET parameters and making the HTTP call to execute a core command
|
|
|
|
*/
|
|
|
|
protected function coreCommand($command, $core, $params=array())
|
|
|
|
{
|
|
|
|
$command = strtoupper($command);
|
2011-05-02 06:33:05 +02:00
|
|
|
|
2015-11-21 07:19:20 +01:00
|
|
|
$params = array_merge($params, array('action' => $command, 'wt' => 'json'));
|
|
|
|
$params[$command == 'CREATE' ? 'name' : 'core'] = $core;
|
2011-05-02 06:33:05 +02:00
|
|
|
|
2015-11-21 07:19:20 +01:00
|
|
|
return $this->_sendRawGet($this->_constructUrl('admin/cores', $params));
|
|
|
|
}
|
2011-05-02 06:33:05 +02:00
|
|
|
|
2015-11-21 07:19:20 +01:00
|
|
|
/**
|
|
|
|
* Is the passed core active?
|
|
|
|
* @param $core string - The name of the core
|
|
|
|
* @return boolean - True if that core exists & is active
|
|
|
|
*/
|
|
|
|
public function coreIsActive($core)
|
|
|
|
{
|
|
|
|
$result = $this->coreCommand('STATUS', $core);
|
|
|
|
return isset($result->status->$core->uptime);
|
|
|
|
}
|
2011-05-02 06:33:05 +02:00
|
|
|
|
2015-11-21 07:19:20 +01:00
|
|
|
/**
|
|
|
|
* Create a new core
|
|
|
|
* @param $core string - The name of the core
|
|
|
|
* @param $instancedir string - The base path of the core on the server
|
|
|
|
* @param $config string - The filename of solrconfig.xml on the server. Default is $instancedir/solrconfig.xml
|
|
|
|
* @param $schema string - The filename of schema.xml on the server. Default is $instancedir/schema.xml
|
|
|
|
* @param $datadir string - The path to store data for this core on the server. Default depends on solrconfig.xml
|
|
|
|
* @return Apache_Solr_Response
|
|
|
|
*/
|
|
|
|
public function coreCreate($core, $instancedir, $config=null, $schema=null, $datadir=null)
|
|
|
|
{
|
|
|
|
$args = array('instanceDir' => $instancedir);
|
|
|
|
if ($config) {
|
|
|
|
$args['config'] = $config;
|
|
|
|
}
|
|
|
|
if ($schema) {
|
|
|
|
$args['schema'] = $schema;
|
|
|
|
}
|
|
|
|
if ($datadir) {
|
|
|
|
$args['dataDir'] = $datadir;
|
|
|
|
}
|
2011-05-02 06:33:05 +02:00
|
|
|
|
2015-11-21 07:19:20 +01:00
|
|
|
return $this->coreCommand('CREATE', $core, $args);
|
|
|
|
}
|
2011-05-02 06:33:05 +02:00
|
|
|
|
2015-11-21 07:19:20 +01:00
|
|
|
/**
|
|
|
|
* Reload a core
|
|
|
|
* @param $core string - The name of the core
|
|
|
|
* @return Apache_Solr_Response
|
|
|
|
*/
|
|
|
|
public function coreReload($core)
|
|
|
|
{
|
|
|
|
return $this->coreCommand('RELOAD', $core);
|
|
|
|
}
|
2011-05-02 06:33:05 +02:00
|
|
|
|
2015-11-21 07:19:20 +01:00
|
|
|
/**
|
|
|
|
* Create a new Solr3Service_Core instance for the passed core
|
|
|
|
* @param $core string - The name of the core
|
|
|
|
* @return Solr3Service_Core
|
|
|
|
*/
|
|
|
|
public function serviceForCore($core)
|
|
|
|
{
|
|
|
|
$klass = Config::inst()->get(get_called_class(), 'core_class');
|
|
|
|
return new $klass($this->_host, $this->_port, $this->_path.$core, $this->_httpTransport);
|
|
|
|
}
|
2011-05-02 06:33:05 +02:00
|
|
|
}
|