yongchengchen / laravel-elasticsearch by Yongcheng

Eloquent ORM encapsulation of Elasticsearch for Laravel
14
2
1
Package Data
Maintainer Username: Yongcheng
Maintainer Contact: yongcheng.chen@live.com (Yongcheng Chen)
Package Create Date: 2016-12-07
Package Last Update: 2024-02-19
Language: PHP
License: MIT
Last Refreshed: 2024-11-22 03:11:33
Package Statistics
Total Downloads: 14
Monthly Downloads: 2
Daily Downloads: 0
Total Stars: 2
Total Watchers: 1
Total Forks: 1
Total Open Issues: 0

Laravel ElasticSuit

Total Downloads Latest Stable Version Latest Unstable Version License

This is a package to integrate Elasticsearch to Laravel5

It makes you do Elasticsearch just using Eloquent's API.

Installation

  1. Require this package with composer:
composer require yong/elasticsuit dev-master
  1. Add service provider to config/app.php
Yong\ElasticSuit\Service\Provider;
  1. 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

  1. 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');
    }
}
  1. Create a new document

$testmodel = new TestModel();
$testmodel->first_name = 'firstname';
$testmodel->last_name = 'lastname';
$testmodel->age = 20;
$testmodel->save();
  1. 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

  1. 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:

MIT: http://rem.mit-license.org