mirror of
https://github.com/silverstripe/silverstripe-fulltextsearch
synced 2024-10-22 14:05:29 +02:00
3d18903552
Solr::configure_server now takes "version" as one of the keys in the option array, and behaves slightly differently depending on whether that version is 3 or 4, to provide support for both Solr versions. The Solr extras and templates have also moved, so that different versions can be provided for the two different Solr versions.
78 lines
2.6 KiB
PHP
78 lines
2.6 KiB
PHP
<?php
|
|
|
|
Solr::include_client_api();
|
|
|
|
/**
|
|
* The API for accessing a specific core of a Solr server. Exactly the same as Apache_Solr_Service for now.
|
|
*/
|
|
class SolrService_Core extends Apache_Solr_Service {
|
|
}
|
|
|
|
/**
|
|
* 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.
|
|
*/
|
|
class SolrService extends SolrService_Core {
|
|
private static $core_class = 'SolrService_Core';
|
|
|
|
/**
|
|
* 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);
|
|
|
|
$params = array_merge($params, array('action' => $command, 'wt' => 'json'));
|
|
$params[$command == 'CREATE' ? 'name' : 'core'] = $core;
|
|
|
|
return $this->_sendRawGet($this->_constructUrl('admin/cores', $params));
|
|
}
|
|
|
|
/**
|
|
* 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);
|
|
}
|
|
|
|
/**
|
|
* 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;
|
|
|
|
return $this->coreCommand('CREATE', $core, $args);
|
|
}
|
|
|
|
/**
|
|
* Reload a core
|
|
* @param $core string - The name of the core
|
|
* @return Apache_Solr_Response
|
|
*/
|
|
public function coreReload($core) {
|
|
return $this->coreCommand('RELOAD', $core);
|
|
}
|
|
|
|
/**
|
|
* 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);
|
|
}
|
|
}
|