funphp / elasticsearch
An Elasticsearch query package
1.1.7
2024-04-09 05:36 UTC
Requires
- php: >=7.4
- elasticsearch/elasticsearch: ^7.8.0
- laravel/framework: >=6.0
README
一个基于elasticsearch/elasticsearch简易的Elasticsearch工具包, 对Document
的查询操作进行了简单的封装.
安装
composer require funphp/elasticsearch
使用
引入相关搜索类
在你需要搜索的类中添加 \Funphp\Elasticsearch\Searchable
trait, 就可以使用相关的搜索操作了.
通过 searchableIndex()
方法, 就可以指定index
了.
namespace Start; use Funphp\Elasticsearch\Searchable; Class User{ use Searchable; public function searchableIndex(): string { return 'index-user'; } }
查询文档
根据指定id
查询
self::searchable() ->searchableId('test-id') ->search();
term
self::searchable() ->query(function (Query $query) { $query->term('status', 1); }) ->search();
match
self::searchable() ->query(function (Query $query) { $query->match('name', '乌拉'); }) ->search();
ids
self::searchable() ->query(function (Query $query) { $query->ids([1, 2]); }) ->search();
range
self::searchable() ->query(function (Query $query) { $query->range('age', function (Range $range) { $range->gte(20); }); }) ->search();
bool
must
self::searchable() ->query(function (Query $query) { $query->bool(function (BoolQuery $boolQuery) { $boolQuery->must(function (Query $query) { $query->range('login_at', function (Range $range) { $range->gte('2021-10-01 00:00:00'); }); })->must(function (Query $query) { $query->range('age', function (Range $range) { $range->lt(18)->gte(12); }); }); }); }) ->sort(fn(Sort $sort) => $sort->sortBy('age')) ->search();
must_not
self::searchable() ->query(function (Query $query) { $query->bool(function (BoolQuery $boolQuery) { $boolQuery->mustNot(function (Query $query) { $query->exists('comments'); }); }); }) ->from(10) ->size(10) ->source(['id', 'title', 'content']) ->search();
filter
should
用法与must
相同
source
你可以使用`source` 来指定查询的列
对于分页查询,你可以使用`from`和`size`方法来实现.
aggs
self::searchable() ->query(function (Query $query) { $query->term('status', $status); })->aggs(function (Aggregation $aggregation) { $aggregation->valueCount('count', 'id') ->max('max', 'value') ->sum('sum', 'value'); })->search();