taq / torm-elastic
ElasticSearch integration for TORM
Requires
- php: >=5.3.0
- elasticsearch/elasticsearch: ~1.0
- taq/torm: >=1.2.2
README
This is a trait to insert ElasticSearch funcionality on TORM objects.
Installation
Change (or create, if needed) your Composer file to include it:
{
"require": {
"taq/torm-elastic": ">=0"
}
}
Usage
Just open your model and insert the trait, like:
class User extends TORM\Model {
use TORM\ElasticSearch;
}
User::setElasticSearchIndex("myapp");
and, after every object saving, it will be send for ElasticSearch indexing, using some rules:
- Need to insert the trait using
use TORM\ElasticSearch
on the model; - Need to specify the app name using setElasticSearchIndex(). This will be the ElasticSearch index.
- After inserting the trait, a new
afterInitialize
method will be added on the model. If the model already has aafterInitialize
method, theTORM\ElasticSearch
afterInitialize
method must be called explicity on its end. This is because of the way PHP traits works. - If not specified, all the model attributes will be indexed. To define just
some key attributes, we can use the
setElasticSearchValues(<attributes>)
method, sending an array with the attributes, like:
then only theUser::setElasticSearchValues(["name"]);
name
attribute will be indexed.
Searching
Then we can search using something like:
$rtn = ElasticUser::elasticSearch("name", "john");
var_dump($rtn);
resulting in something like
array(2) {
'id' =>
string(1) "1"
'name' =>
string(12) "John Doe Jr."
}
Importing
When importing a new data collection, we can use the import
method, like:
User::elasticImport();
Getting document count
User:;elasticCount();
Updating a document
We can explicity update a document using:
$obj->updateElasticSearch();
Deleting a document
We can explicity delete a document using:
$obj->deleteElasticSearch();
Disabling
We can disable updating documents using
TORM\ElasticSearchConfigs::disabled(true);
and enable again sending false
on the same method.
Testing
If using a TORM
test enviroment (defined setting the enviroment var TORM_ENV
to test
), the index name will be automatically changed to <index_name>_test
.
If we want to avoid updating a document on the test enviroment, we can use
TORM\ElasticSearchConfigs::avoidOnTests(true);