manugarciaes / easy-search-bundle
轻松将ElasticaBundle集成到您的项目中,包括过滤器、聚合等...
Requires
- friendsofsymfony/elastica-bundle: ^3.1
- symfony/symfony: ~2.7.7
This package is not auto-updated.
Last update: 2024-09-14 19:25:33 UTC
README
-
您需要安装并配置Fos Elastica Bundle
-
将SearchBundle添加到您的appKernel
$bundles = array( [..] new manugarciaes\SearchBundle\SearchBundle(), );
-
更改您的Fos Elastica Bundle配置,使用以下存储库
persistence: [..] repository: manugarciaes\SearchBundle\Repository\SearchRepository
-
创建一个新服务,使用Easy Search Service,例如以下示例
如果您想添加过滤器
-
创建一个使用Easy Search Filter Object的新服务
## FILTER EXAMPLE elastic.search.filter.enabled: class: SearchBundle\Filter\ObjectFilter calls: - [setField, ['enabled']] - [setValue, [true]]
如果您需要一个动态值,您可以使用例如服务或类似的东西
- [setValue, ["@=service('request_stack').getMasterRequest.get('enabled')"]]
使用这个,您的过滤器会根据请求更改值
-
将此过滤器添加到您的搜索服务中
示例
article.search: class: SearchBundle\Services\SearchService arguments: - "@fos_elastica.manager.orm" - %elastica_entity% - ['%search_string%'] calls: - [addFilter, ['@elastic.search.filter.enabled']]
如果您想添加聚合
-
创建一个使用Easy Search Aggregation Object的新服务
## example elastic.search.aggregation.categories: class: Elastica\Aggregation\Terms arguments: - %name% calls: - [setField, ['%category_field%']] - [setSize, [%category_size%]]
-
将此聚合添加到您的Easy Search服务中
示例
article.search:
class: SearchBundle\Services\SearchService
arguments:
- "@fos_elastica.manager.orm"
- %elastica_entity%
- ['%search_string%']
calls:
- [addAggregation, [@elastic.search.aggregation.categories]]
现在您可以使用此服务进行搜索,例如
$searchService = $this->get('article.search');
$results = $searchService->search('hello');