th-zhou/esorm

v1.0 2021-12-30 05:51 UTC

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']]]]);