yong / elasticsuit
Eloquent ORM encapsulation of Elasticsearch for Laravel
5.7
2021-11-02 05:34 UTC
Requires
- php: >=7.1
- elasticsearch/elasticsearch: 7.11
- illuminate/support: >=5.2.0
This package is not auto-updated.
Last update: 2024-11-12 20:29:25 UTC
README
This is a package to integrate Elasticsearch to Laravel5
It makes you do Elasticsearch just using Eloquent's API.
Installation
- Require this package with composer:
composer require yong/elasticsuit dev-master
- Add service provider to config/app.php
Yong\ElasticSuit\Service\Provider;
- Add elasticsearch node configuration to the "connections" node of config/database.php
'elasticsearch' => [ 'hosts'=>['127.0.0.1:9200'], 'ismultihandle'=>0, 'database'=> 'db*', 'prefix' => '', 'settings'=> ['number_of_shards'=>2,'number_of_replicas'=>0] ],
Usage
- Define a model for a elasticsearch type
class TestModel extends \Yong\ElasticSuit\Elasticsearch\Model { protected $connection = 'elasticsearch'; protected $table = 'testmodel'; //relations public function Childmodel () { return $this->hasOne(OtherModel::class, '_id'); } }
- Create a new document
$testmodel = new TestModel(); $testmodel->first_name = 'firstname'; $testmodel->last_name = 'lastname'; $testmodel->age = 20; $testmodel->save();
- Search a collection
$collection = TestModel::where('first_name', 'like', 'firstname') ->whereIn('_id', [1,2,3,4,5]) ->whereNotIn('_id', [5,6,7,8,9]) ->where('_id', '=', 1) ->where('age', '>', 18) ->orWhere('last_name', 'like', 'lastname') ->whereNull('nick_name') ->whereNotNull('age') ->whereMultMatch(['last_name', 'description'], 'search words', '60%') ->skip(10) ->forPage(1, 20) ->take(10) ->limit(10) ->select(['first_name', 'last_name', 'age']) ->get(); * also support sum(), avg(), min(), max(), stats(), count() * but not for all fields, only numeric fields can use aggregate
- Relations It also support relations, but remember so far just support using default _id as primary key.
//get relations TestModel::with('childmodel')->where('first_name', 'like', 'firstname')->get();
License
And of course: