yuancode / esbuilder
There is no license information available for the latest version (v1.0.2) of this package.
elasticsearch query builder
v1.0.2
2022-09-21 09:43 UTC
Requires
- php: ^7.0
- elasticsearch/elasticsearch: ^5.4
Requires (Dev)
- phpunit/phpunit: ^9.5
README
esbuilder 提供一个 Elasticsearch 的查询构造器, 像使用 Laravel 一样.
安装
composer require 'yuancode/esbuilder'
使用
创建一个 es client
use Elasticsearch\ClientBuilder; use Yuancode\Es\Builder; $client = ClientBuilder::create()->setHosts(['localhost:9200'])->build(); $query = Builder::client($client);
设置索引
Builder::client($client)->index('testindex');
插入
$row = [ 'name' => '张三', 'age' => 8, 'created' => date("Y-m-d"), ]; $result = Builder::client($client) ->index('testes') ->id('1') //设置id ->insert($row);
批量插入
$rows = []; $grades = ['一年级', '二年级', '三年级']; for ($i = 1; $i < 10; $i++) { $rows[] = [ 'id' => $i, 'name' => '张三' . $i, 'age' => rand(7, 20), 'grade' => $grades[array_rand($grades)], ]; } $results = Builder::client($client)->index('testes')->insert($rows);
更新
$row = [ 'name' => '张三2', ]; $result = Builder::client($client) ->index('testes') ->update($row, '1');
删除
$result = Builder::client($client) ->index('testes') ->delete('1');
简单查询
$info = Builder::client($client) ->index('testes') ->find('1');
条件查询
$arr = Builder::client($client) ->index('testes') ->where('id', '1'); ->get();
过滤查询
$arr = Builder::client($client) ->index('testes') ->filter('id', '1'); ->get();
其他查询条件
$arr = Builder::client($client) ->index('testes') ->filter('id', '1'); ->where('age', '>', 10) ->where('age', '!=', 9) ->whereIn('id', [1,2,3]) ->whereNotIn('id', [4,5,6]) ->where('name', 'like', 'test') // match ->orWhere('name', 'zhangsna') ->get();
排序,去重
$arr = Builder::client($client) ->index('testes') ->where('age', '>', 10) ->orderBy('id', 'desc') ->distinct('name') ->select('name', 'age') ->get();
返回总数量
list($total, $arr) = Builder::client($client) ->index('testes') ->where('age', '>', 10) ->get(true); // or $total = Builder::client($client)->index('testes')->where('age', 10)->count();
指定数量
$arr = Builder::client($client) ->index('testes') ->where('age', '>', 10) ->from(0) ->take(10) ->get(); //使用 limit $arr = Builder::client($client) ->index('testes') ->where('age', '>', 10) ->limit(0, 10) ->get();
使用 boolen 操作
$arr = Builder::client($client) ->index('testes') ->filter('name', 's') ->must('aaa', 'bbb') ->must('aaa2', 'term', 'bbb') ->mustNot('ccc', 'dddd') ->should('aaa','sdlfks') ->get();
嵌套查询
$arr = Builder::client($client) ->index('testes') ->filter(function($query) { $query->where('name2', 'z') ->where('name3', 'a'); }) ->where('name', 'like', 'zhangsan') ->from(0) ->take(10) ->get(); //filter, where, orWhere, must, mustNot,should, 都支持嵌套查询
分组查询 topN 的数据
$arr = Builder::client($client) ->index('testes') ->groupBy('name') ->orderBy('age', 'desc') ->take(10) ->get();
返回查询
$query = Builder::client($client) ->index('testes') ->where('name', 'lskdjfls') ->take(10) ->toQuery(); print_r($query);
boost, _score
$query = Builder::client($client) ->index('testes') ->orWhere('name', '=', 'aaa', 10) ->orWhere('name', '=', 'bbb', 20) ->orderBy('_score', 'desc') ->take(10) ->get();