PHPackages                             th-zhou/esorm - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. th-zhou/esorm

ActiveLibrary[Database &amp; ORM](/categories/database)

th-zhou/esorm
=============

es orm

v1.0(4y ago)251MITPHPPHP ^7.4

Since Dec 30Pushed 4y ago1 watchersCompare

[ Source](https://github.com/TH-zhou/esorm)[ Packagist](https://packagist.org/packages/th-zhou/esorm)[ RSS](/packages/th-zhou-esorm/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (2)Versions (2)Used By (0)

Elasticsearch ORM
=================

[](#elasticsearch-orm)

类似ORM一样操作Elasticsearch curd

Version
-------

[](#version)

versionPHP^7.4elasticsearch/elasticsearch~7.0illuminate/support^5.3 ^6.0 ^7.0 ^8.0Install
-------

[](#install)

```
composer require th-zhou/esorm

```

QuickStart
----------

[](#quickstart)

### getInstance

[](#getinstance)

```
$esSearch = EsSearch::getInstance([
    'hosts' => ['es:9200'],
]);
```

### create

[](#create)

```
$esSearch->index('demo')->create([
    'name'     => 'create demo',
    'quantity' => 100,
]);
```

### update

[](#update)

```
$esSearch->index('demo')->update('100', [
    'name' => 'update demo'
]);
```

### delete

[](#delete)

```
$esSearch->index('demo')->delete('100');
```

### find

[](#find)

```
$esSearch->index('demo')->find('100');
```

```
$esSearch->index('demo')->find('100', ['name']);
$esSearch->index('demo')->select(['name'])->find('100');
```

### first

[](#first)

```
$esSearch->index('demo')->first();
$esSearch->index('demo')->first(['name']);
```

### get

[](#get)

```
$esSearch->index('demo')->get();
$esSearch->index('demo')->get(['name']);
$esSearch->index('demo')->get(['name'], true); // true return total
```

### paginate

[](#paginate)

```
$page = 1;
$pageSize = 10;
$esSearch->index('demo')->paginate($page, $pageSize);
```

### chunk

[](#chunk)

```
$esSearch->index('demo')->chunk(function ($data) {
    // do
});

or

$limit = 1000;
$scroll = '5m';
$esSearch->index('demo')->chunk(function ($data) {
    // do
}, $limit, $scroll);
```

### toQuery

[](#toquery)

不执行任务es操作，只会返回即将操作的参数。

### more

[](#more)

#### where

[](#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

[](#wherematch)

分词匹配查询。同系列的还有orWhereMatch、whereNotMatch、orWhereNotMatch

```
$esSearch->index('demo')->whereMatch('name', 'create_demo');
```

### whereMatchKeyword

[](#wherematchkeyword)

不分词匹配查询。同系列的还有orWhereMatchKeyword、whereNotMatchKeyword、orWhereNotMatchKeyword

```
$esSearch->index('demo')->whereMatchKeyword('name', 'create_demo');
```

### whereTerm

[](#whereterm)

精确匹配查询。同系列的还有orWhereTerm、whereNotTerm、orWhereNotTerm

```
$esSearch->index('demo')->whereTerm('name', 'create_demo');
```

### whereTermKeyword

[](#wheretermkeyword)

不分词精确匹配查询。同系列的还有orWhereTermKeyword、whereNotTermKeyword、orWhereNotTermKeyword

```
$esSearch->index('demo')->whereTermKeyword('name', 'create_demo');
```

### 多个值精确匹配查询

[](#多个值精确匹配查询)

#### whereTerms

[](#whereterms)

同系列的还有orWhereTerms、whereNotTerms、orWhereNotTerms

```
$esSearch->index('demo')->whereTerms('quantity', [100, 200]);
```

#### whereIn

[](#wherein)

同系列的还有orWhereIn、whereNotIn、orWhereNotIn

```
$esSearch->index('demo')->whereIn('quantity', [100, 200]);
```

### whereRange

[](#whererange)

同系列的还有orWhereRange

```
$esSearch->index('demo')->whereRange('quantity', [100, 200]);
```

### whereBetween

[](#wherebetween)

同系列的还有orWhereBetween、whereNotBetween、orWhereNotBetween

```
$esSearch->index('demo')->whereBetween('quantity', [100, 200]);
```

### whereExists

[](#whereexists)

验证字段是否存在。同系列还有orWhereExists、whereNotExists、orWhereNotExists

```
$esSearch->index('demo')->whereExists('name');
```

### select

[](#select)

查询指定字段

```
$esSearch->index('demo')->select('name', 'quantity');

or

$esSearch->index('demo')->select(['name', 'quantity']);
```

### orderBy

[](#orderby)

```
$esSearch->index('demo')->orderBy('quantity', 'desc'); // asc
```

### offset

[](#offset)

```
$esSearch->index('demo')->offset(0);
```

### limit

[](#limit)

```
$esSearch->index('demo')->limit(100);
```

### aggBy

[](#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']]]]);
```

###  Health Score

23

—

LowBetter than 27% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity49

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

1599d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/43a88e5a2a1a22955cf090923e1d8905f99718585596f7494017eec298654417?d=identicon)[TH-zhou](/maintainers/TH-zhou)

---

Top Contributors

[![TH-zhou](https://avatars.githubusercontent.com/u/24542900?v=4)](https://github.com/TH-zhou "TH-zhou (1 commits)")

---

Tags

elasticsearchorm

### Embed Badge

![Health badge](/badges/th-zhou-esorm/health.svg)

```
[![Health](https://phpackages.com/badges/th-zhou-esorm/health.svg)](https://phpackages.com/packages/th-zhou-esorm)
```

###  Alternatives

[illuminate/database

The Illuminate Database package.

2.8k52.4M9.4k](/packages/illuminate-database)[laravel-doctrine/orm

An integration library for Laravel and Doctrine ORM

8425.3M87](/packages/laravel-doctrine-orm)[pdphilip/elasticsearch

An Elasticsearch implementation of Laravel's Eloquent ORM

145360.2k4](/packages/pdphilip-elasticsearch)[basemkhirat/elasticsearch

Laravel, Lumen and Native php elasticseach query builder to build complex queries using an elegant syntax

402312.0k](/packages/basemkhirat-elasticsearch)[sleimanx2/plastic

Plastic is an Elasticsearch ODM and mapper for Laravel. It renders the developer experience more enjoyable while using Elasticsearch by providing a fluent syntax for mapping , querying and storing eloquent models.

508141.9k1](/packages/sleimanx2-plastic)[crcms/elasticsearch

Use SQL statements to query elasticsearch

1058.3k1](/packages/crcms-elasticsearch)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
