payamjafari / elasticute
1.2.3
2021-12-07 12:17 UTC
Requires
- php: >=7.4
- ext-json: *
- elasticsearch/elasticsearch: >=6.8.2
- vlucas/phpdotenv: >=4.2.0
README
使用此构建器,您可以在不编写原始查询的情况下轻松地执行数据库查询。
安装
composer require payamjafari/elasticute
用法
只需在QueryBuilder类中调用"query"方法,您就准备好了。
<?php use ElastiCute\ElastiCute\QueryBuilder; $cards = QueryBuilder::query()->index( 'cards' )->get(); // use $cards for your needs
过滤查询
为了过滤您的查询,您可以使用多个方法,例如where、whereNot、orWhere等。
<?php use ElastiCute\ElastiCute\QueryBuilder; $cards = QueryBuilder::query() ->index( 'cards' ) ->whereEqual( 'name', 'foo' ) ->whereNotEqual( 'count', 10 ) ->get(); // limit documents count by giving a number to "get". Example: get(10); // use $cards for your needs
过滤方法
分组过滤
您可以通过向"where"方法添加一个闭包来将过滤器设置为组。
<?php use ElastiCute\ElastiCute\QueryBuilder; $cards = QueryBuilder::query() ->index( 'cards' ) ->groupShould( function( QueryBuilder $builder ){ $builder->whereEqual( 'name', 'payam' ); $builder->whereNotEqual( 'name', 'kourosh' ); $builder->groupMust( function( QueryBuilder $builder ){ $builder->whereExists( 'lastname' ); $builder->whereTextContains( 'name', 'kourosh2' ); } ); } ) ->whereTextNotContains( 'lastname', 'weber' ) ->get(); // use $cards for your needs
分组过滤方法
聚合
聚合非常重要,并且可以在任何地方使用。所以您可以使用它非常容易。看看这个例子。
<?php use ElastiCute\ElastiCute\Aggregation\AggregationBuilder; use ElastiCute\ElastiCute\QueryBuilder; $cards = QueryBuilder::query() ->index( 'cards' ) ->aggregate( function( AggregationBuilder $query ){ $query->make('like_count')->avg()->field('like_count'); $query->make('dislike_count')->avg()->field('dislike_count'); } ) ->whereTextNotContains( 'lastname', 'weber' ) ->get(); // response will include $cards['aggregations']
聚合方法
注意:随着时间的推移,将添加更多聚合:
响应
每个请求都有一个响应,然后必须进行处理。
<?php use ElastiCute\ElastiCute\QueryBuilder; $cards = QueryBuilder::query() ->index( 'cards' ) ->get() ->toArray(); $cards = QueryBuilder::query() ->index( 'cards' ) ->get() ->map( function( $value ) { // Do some stuff with $value } ); // use $cards for your needs
响应方法
排序 / OrderBy
<?php use ElastiCute\ElastiCute\QueryBuilder; $cards = QueryBuilder::query() ->index( 'cards' ) ->sort( [ 'name' => [ 'order' => 'desc' ] ] ) ->get(); // use $cards for your needs
分页文档
<?php use ElastiCute\ElastiCute\QueryBuilder; $cards = QueryBuilder::query() ->index( 'cards' ) ->paginate( 10, 1 ); // paginate( int $document_per_page = 10, int $current_page = 1 ) // use $cards for your needs
选择特定字段
<?php use ElastiCute\ElastiCute\QueryBuilder; $cards = QueryBuilder::query() ->index( 'cards' ) ->select( [ 'name', 'size' ] ) ->get(); // use $cards for your needs
运行时选择索引
您可以通过调用"index"方法在查询中选择索引。
<?php use ElastiCute\ElastiCute\QueryBuilder; $cards = QueryBuilder::query() ->index( 'cards' ) ->whereEqual( 'name', 'foo' ) // your filters come here before delete ->get();
通过id查找
通过调用"find"方法,您可以根据id检索文档。
<?php use ElastiCute\ElastiCute\QueryBuilder; $card = QueryBuilder::query() ->index( 'cards' ) ->find( 'wDCoxXUBA0stnoJxvwdR', true ); // find( $id, bool $get_only_source = true )
获取索引映射
通过调用"mapping"方法,您可以检索索引映射。
<?php use ElastiCute\ElastiCute\QueryBuilder; $card = QueryBuilder::query() ->index( 'cards' ) ->mapping();
提示:
您不需要首先调用"query"方法。您可以直接在开始时直接调用索引。
<?php use ElastiCute\ElastiCute\QueryBuilder; $card = QueryBuilder::index( 'cards' ) ->find( 'wDCoxXUBA0stnoJxvwdR', true ); // find( $id, bool $get_only_source = true ) $cards = QueryBuilder::index( 'cards' ) ->whereEqual( 'name', 'foo' ) ->get();