Solarium PHP Solr Client Library
What is Solarium?
Solarium is a PHP Solr client library that accurately models Solr concepts. Where many other Solr libraries only handle the communication with Solr, Solarium also relieves you of handling all the complex Solr query parameters using a well documented API.
Please see the docs for a more detailed description.
Requirements
Solarium 6.4.x only supports PHP 8.0 and up.
It's highly recommended to have cURL enabled in your PHP environment. However if you don't have cURL available you can switch from using cURL (the default) to a pure PHP based HTTP client adapter which works for the essential stuff but doesn't support things like parallel query execution.
Alternatively you can inject any PSR-18 compatible HTTP Client using the Psr18Adapter
.
Getting started
The preferred way to install Solarium is by using Composer. Solarium is available on Packagist.
Example:
composer require solarium/solarium
Pitfall when upgrading to 6.4
Support for PHP 7 was removed in Solarium 6.4.0. Upgrade to PHP 8 first to use the latest Solarium version.
Pitfall when upgrading to 6.3
With Solarium 6.3 update queries use the JSON request format by default.
If you do require XML specific functionality, set the request format to XML explicitly.
// get an update query instance
$update = $client->createUpdate();
// set XML request format
$update->setRequestFormat($update::REQUEST_FORMAT_XML);
Pitfalls when upgrading from 3.x or 4.x or 5.x
Setting a timeout
Setting "timeout" as "option" in the HTTP Client Adapter is deprecated since Solarium 5.2.0 because not all adapters
could handle it. The adapters which can handle it now implement the TimeoutAwareInterface
and you need to set the
timeout using the setTimeout()
function after creating the adapter instance.
Solarium\Client()
constructor
With Solarium 6 you need to pass an adapter instance and an event dispatcher instance to the Solarium\Client()
constructor as the first and second parameter. An optional options array can now be passed as the third parameter.
Previous versions used the Curl
adapter and the Symfony EventDispatcher by default. Solarium 5.2
already informed you about the deprecation of calling this constructor with the old signature.
Solarium 5:
$options = [
// ...
];
$client = new Solarium\Client($options);
Solarium 6:
$adapter = new Solarium\Core\Client\Adapter\Curl();
$eventDispatcher = new Symfony\Component\EventDispatcher\EventDispatcher();
$options = [
// ...
];
$client = new Solarium\Client($adapter, $eventDispatcher, $options);
The Symfony EventDispatcher is also no longer automatically available for autoloading.
If you want to keep using it, you can add it to your project's composer.json
.
Alternatively you can use any PSR-14 compatible event dispatcher.
{
"require": {
"solarium/solarium":Â "~6.4",
"symfony/event-dispatcher": "^5.0 || ^6.0"
}
}
Adapters
The Zend2HttpAdapter
, GuzzleAdapter
, and Guzzle3Adapter
were removed in Solarium 6.
You can use the Psr18Adapter
with any PSR-18 compliant HTTP client instead.
Example:
composer require php-http/guzzle7-adapter
composer require nyholm/psr7
$httpClient = new Http\Adapter\Guzzle7\Client();
$factory = new Nyholm\Psr7\Factory\Psr17Factory();
$adapter = new Solarium\Core\Client\Adapter\Psr18Adapter($httpClient, $factory, $factory);
Local parameter names
In order to fix some issues with complex queries using local parameters Solarium 6 distinguishes between query parameters
and local parameters to be embedded in a query. Solarium 5.2 already informed you about the deprecation of some
parameter names which are in fact local parameters. Solarium doen't convert them magically anymore.
Local parameter names now have to be prefixed with local_
if set as option of a constructor.
Solarium 5:
$categoriesTerms = new Solarium\Component\Facet\JsonTerms([
'key' => 'categories',
'field' => 'cat',
'limit' => 4,
'numBuckets' => true,
]);
Solarium 6:
$categoriesTerms = new Solarium\Component\Facet\JsonTerms([
'local_key' => 'categories',
'field' => 'cat',
'limit' => 4,
'numBuckets' => true,
]);
See https://solr.apache.org/guide/local-parameters-in-queries.html for an introduction about local parameters.
Pitfall when upgrading from 3.x or 4.x
In the past, the V1 API endpoint solr
was not added automatically, so most users set it as path on the endpoint.
This bug was discovered with the addition of V2 API support. In almost every setup, the path has to be set to /
instead of /solr
with this release!
For the same reason it is a must to explicitly configure the core or collection.
So an old setting like
'path' => '/solr/xxxx/'
has to be changed to something like
'path' => '/',
'collection' => 'xxxx',
This led to a problem if the endpoint isn't the default solr
. Since 6.2.1, a different context can be configured.
An old settings like
'path' => '/index/xxxx/'
can be changed to something like
'path' => '/',
'context' => 'index',
'collection' => 'xxxx',
This works for SolrCloud instances with a non-default hostContext
and Solr instances behind a reverse proxy.
Run the examples
To run the examples read through the Example code section of https://solarium.readthedocs.io/en/stable/getting-started/
Run the tests
The phpunit tests contain some integration tests that require a running Solr instance. And this Solr instance requires
some special configuration.
Have a look at .github/workflows/run-tests.yml
to see how to start a well configured Solr docker container locally.
If you just want to run the unit tests, just ensure that there's no other Solr server listening on the standard port
8983 and the integration tests will be skipped.
You can run the tests in a Windows environment. For all of them to pass, you must make sure to
checkout with LF
line endings.
More information
-
Issue tracker http://github.com/solariumphp/solarium/issues
-
Contributors https://github.com/solariumphp/solarium/contributors
-
License See the COPYING file or view online: https://github.com/solariumphp/solarium/blob/master/COPYING