dev-master
9999999-devSolr plugin for the Yii2 framework built ontop of Solarium
BSD-3-Clause
The Requires
by Max Kalyabin
by Sammaye
extension yii2 solr yii2 extension solarium yii2-extension kalyabin sammaye
Solr plugin for the Yii2 framework built ontop of Solarium
A Yii2 Solr Extension built on top of Solarium., (*1)
Forked from http://github.com/sammaye/yii2-solr, (*2)
Essentially this is a Yii2 plugin for Solarium and it is dirt simple to use, all it does is abstract certain parts of Solarium into Yii2., (*3)
There are only two files you need to pay attention to in this repository:, (*4)
Normal querying of Solr is very simple with this extension and I will in fact point you towards the Solarium Documentation., (*5)
The only part Yii2 really has is in providing the Solarium client class as a application component, to show an example:, (*6)
$query = Yii::$app->solr->createSelect(); $query->setQuery('edismax&qf=title^20.0 OR description^0.3'); $result = Yii::$app->solr->select($query); var_dump($result->getNumFound());
That is what it takes to query Solarium. As you notice the only part of the Solarium documentation you need to replace is where they use $client
and instead you
should use Yii::$app->solr
(or whatever you have called the Solr application component in your configuration)., (*7)
To setup the application you merely add it to your configuration. As an example:, (*8)
'solr' => [ 'class' => 'kalyabin\solr\Client', 'options' => [ 'endpoint' => [ 'solr1' => [ 'host' => '10.208.225.66', 'port' => '8983', 'path' => '/solr' ] ] ] ],
The options
part of the configuration is a one-to-one match to Solariums own constructor and options., (*9)
Using the data provider for widgets is just as easy, as another example:, (*10)
$query = Yii::$app->solr->createSelect(); $query->setQuery('(alt_subject_mpath:' . $model->path . ' OR alt_subject_mpath:' . $model->path . '.*) AND live:1'); new SolrDataProvider([ 'query' => $query, // an example class which assigns variables to the model(s) // and returns the model(s) 'modelClass' => 'SolrResult', 'sort' => [ 'attributes' => [ 'title', 'sales', 'score' ] ] ]);
As you will notice the Solarium query object can go straight into the data providers query
property. Just like in Yii1 you need to provide a modelClass
since this extension is not
connected to active record directly., (*11)
The reasoning for not implementing a QueryInterface
and making the query hook into an active record is because in many cases the Solr index represents many active records all at once
as such I wanted to make it free form and give the user the ability to produce a specific Solr model that can return any active record they see fit while the data provider just feeds the
multiple classes into a widget., (*12)
So now the basics are understood, you will see there are two others files:, (*13)
The Solr
class is just a helper that you don't really need if you don't want it so I will move onto the SolrDocumentInterface
. The interface class just defines a single function
populateFromSolr
which takes one argument: the Solarium document object (from a loop). It returns a single Yii2 model. The populateFromSolr
function is called every
iteration of the data providers prepareModels()
function and only ever takes a single document., (*14)
Solr plugin for the Yii2 framework built ontop of Solarium
BSD-3-Clause
extension yii2 solr yii2 extension solarium yii2-extension kalyabin sammaye