composer require vae/php-elasticsearch-orm
more than 7.0
//require elasticsearch config
$config = require "elasticsearch.php";
//instance
$builder = Factory::builder($config);
Add the service provider config in config/app.php
'providers' => [
Vae\PhpElasticsearchOrm\Laravel\ElasticsearchOrm\OrmProvider::class,
]
Use in Code
$builder = app(\Vae\PhpElasticsearchOrm\Builder::class);
Use in Code
OrmElasticsearchClientFactory
use \Vae\PhpElasticsearchOrm\Builder;
use \Vae\PhpElasticsearchOrm\Query;
use \Vae\PhpElasticsearchOrm\Grammar;
class OrmElasticsearchClientFactory{
public static function builder()
{
// 如果在协程环境下创建,则会自动使用协程版的 Handler,非协程环境下无改变
$hyperfBuilder = ApplicationContext::getContainer()->get(ClientBuilderFactory::class)->create();
$client = $hyperfBuilder->setHosts(['http://127.0.0.1:9200'])->build();
return new Builder(new Query(new Grammar(), $client));
}
}
$builder->index('index')->create(['key' => 'value']);
//return collection
$builder->index('index')->createCollection(['key' => 'value']);
$builder->index('index')->batchCreate(
[
'key1' => 'v1',
'key2' => 'v2',
],
[
'key3' => 'v3',
'key4' => 'v4',
]
);
$builder->index('index')->update(['key' => 'value']);
$builder->index('index')->update(['key' => ['key2' => 'value']]);
$builder->index('index')->batchUpdateOrCreate(
[
'id' => '1',
'key1' => 'v1',
'key2' => 'v2',
],
[
'id' => 2,
'key3' => 'v3',
'key4' => 'v4',
]
);
$builder->index('index')->deleteById($id) : bool
$builder->index('index')->delete()
//select one
$builder->index('index')->first();
//select all
$builder->index('index')->get();
//select with paginate
$builder->index('index')->paginate($page, $size) : Collection
//select by id
$builder->byId($id) : stdClass
//select by id if failed throw error
$builder->byIdOrFail($id) : stdClass
//select chunk
$builder->chunk(callback $callback, $limit = 2000, $scroll = '10m')
$builder->count() : int
whereTerm
$builder->whereTerm('key', 'value');
whereLike(wildcard)
//value without add wildcard '*'
$builder->whereLike('key', 'value');
match
$builder->whereMatch('key', 'value');
range
$builder->whereBetween('key', ['value1', 'value2']);
where in
$builder->whereIn('key', ['value1', 'value2', ...]);
nestedQuery
$builder->where(function(Builder $query){
$query->whereTerm('key', 'value');
});
search nested data
$nestedColumn = "nested_column";
$builder->whereNested($nestedColumn, function ($query) {
$query->where('key1', 'value1')
$query->where('key2', 'value2')
});
$nestedKey = "nested_key";
$key = "key";
$builder->where("{$nestedKey}@{$key}", '=', 'value');
['=' => 'eq','>' => 'gt','>=' => 'gte','<' => 'lt','<=' => 'lte','!=' => 'ne',]
$builder->where('key', '=', 'value');
see file Vae\PhpElasticsearchOrm\Builder