th-zhou / esorm
es orm
v1.0
2021-12-30 05:51 UTC
Requires
- php: ^7.4
- elasticsearch/elasticsearch: ~7.0
- illuminate/support: ^5.3|^6.0|^7.0|^8.0
This package is auto-updated.
Last update: 2024-04-29 05:05:44 UTC
README
类似ORM一样操作Elasticsearch curd
Version
version | |
---|---|
PHP | ^7.4 |
elasticsearch/elasticsearch | ~7.0 |
illuminate/support | ^5.3 ^6.0 ^7.0 ^8.0 |
Install
composer require th-zhou/esorm
QuickStart
getInstance
$esSearch = EsSearch::getInstance([ 'hosts' => ['es:9200'], ]);
create
$esSearch->index('demo')->create([ 'name' => 'create demo', 'quantity' => 100, ]);
update
$esSearch->index('demo')->update('100', [ 'name' => 'update demo' ]);
delete
$esSearch->index('demo')->delete('100');
find
$esSearch->index('demo')->find('100');
$esSearch->index('demo')->find('100', ['name']); $esSearch->index('demo')->select(['name'])->find('100');
first
$esSearch->index('demo')->first(); $esSearch->index('demo')->first(['name']);
get
$esSearch->index('demo')->get(); $esSearch->index('demo')->get(['name']); $esSearch->index('demo')->get(['name'], true); // true return total
paginate
$page = 1; $pageSize = 10; $esSearch->index('demo')->paginate($page, $pageSize);
chunk
$esSearch->index('demo')->chunk(function ($data) { // do }); or $limit = 1000; $scroll = '5m'; $esSearch->index('demo')->chunk(function ($data) { // do }, $limit, $scroll);
toQuery
不执行任务es操作,只会返回即将操作的参数。
more
where
同系列的还有orWhere
$esSearch->index('demo')->where(function (\EsORM\Query $query) { $query->where('name', 'create_demo')->orWhere('quantity', 100); }); $esSearch->index('demo')->where('name', 'create_demo'); $esSearch->index('demo')->where('quantity' '>=', 100); $esSearch->index('demo')->where(['name' => 'create_demo', 'quantity' => 100]); $esSearch->index('demo')->where(['name' => 'create_demo', 'quantity' => [50, 150]]);
whereMatch
分词匹配查询。同系列的还有orWhereMatch、whereNotMatch、orWhereNotMatch
$esSearch->index('demo')->whereMatch('name', 'create_demo');
whereMatchKeyword
不分词匹配查询。同系列的还有orWhereMatchKeyword、whereNotMatchKeyword、orWhereNotMatchKeyword
$esSearch->index('demo')->whereMatchKeyword('name', 'create_demo');
whereTerm
精确匹配查询。同系列的还有orWhereTerm、whereNotTerm、orWhereNotTerm
$esSearch->index('demo')->whereTerm('name', 'create_demo');
whereTermKeyword
不分词精确匹配查询。同系列的还有orWhereTermKeyword、whereNotTermKeyword、orWhereNotTermKeyword
$esSearch->index('demo')->whereTermKeyword('name', 'create_demo');
多个值精确匹配查询
whereTerms
同系列的还有orWhereTerms、whereNotTerms、orWhereNotTerms
$esSearch->index('demo')->whereTerms('quantity', [100, 200]);
whereIn
同系列的还有orWhereIn、whereNotIn、orWhereNotIn
$esSearch->index('demo')->whereIn('quantity', [100, 200]);
whereRange
同系列的还有orWhereRange
$esSearch->index('demo')->whereRange('quantity', [100, 200]);
whereBetween
同系列的还有orWhereBetween、whereNotBetween、orWhereNotBetween
$esSearch->index('demo')->whereBetween('quantity', [100, 200]);
whereExists
验证字段是否存在。同系列还有orWhereExists、whereNotExists、orWhereNotExists
$esSearch->index('demo')->whereExists('name');
select
查询指定字段
$esSearch->index('demo')->select('name', 'quantity'); or $esSearch->index('demo')->select(['name', 'quantity']);
orderBy
$esSearch->index('demo')->orderBy('quantity', 'desc'); // asc
offset
$esSearch->index('demo')->offset(0);
limit
$esSearch->index('demo')->limit(100);
aggBy
聚合操作
$esSearch->index('demo')->aggBy('quantity', 'sum'); or $esSearch->index('demo')->aggBy(['single_avg_quantity' => ['avg' => ['field' => 'quantity']]]); or $esSearch->index('demo')->aggBy([['quantitys' => ['terms' => ['field' => 'quantity']]]]) or $esSearch->index('demo')->aggBy([['single_avg_quantity' => ['avg' => ['field' => 'quantity']]], ['quantitys' => ['terms' => ['field' => 'quantity']]]]);