kennedytedesco / meilisearch-search-filter
构建 Meilisearch 查询过滤器的流畅直观方式。
v1.0
2023-08-30 13:31 UTC
Requires
- php: ^8.1
Requires (Dev)
- laravel/pint: ^1.11
- pestphp/pest: ^2.16
- phpstan/extension-installer: ^1.3
- phpstan/phpstan: ^1.10.32
- phpstan/phpstan-strict-rules: ^1.5
- rector/rector: ^0.18.0
README
Meilisearch 搜索过滤器
这个零依赖库提供了一个构建 Meilisearch 查询过滤器的流畅直观方式。它通过提供可链式 API 简化了构建过滤器的过程。
安装
最低要求: PHP 8.1 或更高版本。
要在项目中使用此库,您可以使用 Composer 安装它
composer require kennedytedesco/meilisearch-search-filter "^1.0"
用法
您可以通过阅读官方文档了解 Meilisearch 过滤器的工作方式。
您还应该查看Meilisearch PHP SDK。
以下是一些使用此库构建过滤器的示例
use Meilisearch\Client; use KennedyTedesco\Meilisearch\SearchFilter\SearchFilter; $client = new Client('http://127.0.0.1:7700', 'masterKey'); $filter = SearchFilter::new() ->where(function (SearchFilter $filter) { $filter->whereGreaterThan('rating.critics', 80) ->whereGreaterThanOrEqual('rating.users', 70); }) ->whereIn('genres', ['Horror', 'Thriller']); $index = $client->index('movies'); $results = $index->search('wonder', [ // (rating.critics > 80 AND rating.users >= 70) AND genres IN ["Horror", "Thriller"] 'filter' => $filter->build(), ]);
在构建过滤器时,您也可以使用别名方法
use KennedyTedesco\Meilisearch\SearchFilter\SearchFilter; $filter = SearchFilter::new() ->where(function (SearchFilter $filter) { $filter->whereGt('rating.critics', 80) ->whereGte('rating.users', 70); }) ->orWhereIn('genres', ['Horror', 'Thriller']); echo $filter->build(); // Output: (rating.critics > 80 AND rating.users >= 70) OR genres IN ["Horror", "Thriller"]
或者,您可以使用 where(...)
方法,并将运算符作为第二个参数传递
use KennedyTedesco\Meilisearch\SearchFilter\SearchFilter; $filter = SearchFilter::new() ->where(function (SearchFilter $filter) { $filter->where('rating.critics', '>', 80) ->where('rating.users', '>=', 70); }) ->orWhereIn('genres', ['Horror', 'Thriller']); echo $filter->build(); // Output: (rating.critics > 80 AND rating.users >= 70) OR genres IN ["Horror", "Thriller"]
使用范围
TO
运算符等价于 >=
和 <=
。
更多详情请见此链接。
use KennedyTedesco\Meilisearch\SearchFilter\SearchFilter; $filter = SearchFilter::new() ->whereBetween('rating.critics', 80, 90); echo $filter->build(); // Output: rating.critics 80 TO 90
如果您希望结果仅包括 1995 年 3 月之后发行的“喜剧”和“恐怖”电影,则必须对 OR
条件进行分组
use KennedyTedesco\Meilisearch\SearchFilter\SearchFilter; $filter = SearchFilter::new() ->where(function (SearchFilter $filter) { $filter->where('genres', 'horror') ->orWhere('genres', 'comedy'); }) ->where('release_date', '>', '795484800'); echo $filter->build(); // Output: (genres = "horror" OR genres = "comedy") AND release_date > 795484800
因此,当您向 where()
或 orWhere()
方法提供闭包时,一个新的 SearchFilter
实例被作为第一个参数传递给闭包。这允许您在括号内构建嵌套过滤器。
使用 when()
when()
方法允许您有条件地添加过滤器到查询中。例如
use KennedyTedesco\Meilisearch\SearchFilter\SearchFilter; $filter = SearchFilter::new() ->when($request->filled('type'), function (SearchFilter $filter) use($request) { $filter->where('type', $request->get('type')); }) ->where('release_date', '>', '795484800');
所有可用的过滤器方法
贡献
如果您想为此项目做出贡献,请随时提交拉取请求或在 GitHub 存储库中打开问题。