manugarciaes/easy-search-bundle

轻松将ElasticaBundle集成到您的项目中,包括过滤器、聚合等...

安装: 13

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

类型:symfony-bundle

0.1 2016-06-03 13:01 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:25:33 UTC


README

  1. 您需要安装并配置Fos Elastica Bundle

  2. 将SearchBundle添加到您的appKernel

    $bundles = array( [..] new manugarciaes\SearchBundle\SearchBundle(), );

  3. 更改您的Fos Elastica Bundle配置,使用以下存储库

    persistence: [..] repository: manugarciaes\SearchBundle\Repository\SearchRepository

  4. 创建一个新服务,使用Easy Search Service,例如以下示例

    • elastica_entity 是您配置中的 fos elastica 实体

    • search_string 是您实体中想要搜索的字段

      示例

      article.search: class: SearchBundle\Services\SearchService arguments: - "@fos_elastica.manager.orm" - %elastica_entity% - ['%search_string%']

如果您想添加过滤器

  1. 创建一个使用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')"]]

使用这个,您的过滤器会根据请求更改值

  1. 将此过滤器添加到您的搜索服务中

    示例

    article.search: class: SearchBundle\Services\SearchService arguments: - "@fos_elastica.manager.orm" - %elastica_entity% - ['%search_string%'] calls: - [addFilter, ['@elastic.search.filter.enabled']]

如果您想添加聚合

  1. 创建一个使用Easy Search Aggregation Object的新服务

         ## example
         elastic.search.aggregation.categories:
           class: Elastica\Aggregation\Terms
           arguments:
             - %name%
           calls:
             - [setField, ['%category_field%']]
             - [setSize, [%category_size%]]
    
  2. 将此聚合添加到您的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');