jlchassaing / facetbundle
GieFacetBundle是一个帮助创建搜索分面的工具集,并使用这些分面执行Solr查询。
v1.0
2020-09-15 06:34 UTC
Requires
- php: >=7.1
- ezsystems/ezplatform-solr-search-engine: ^1.6|~2.0
- ezsystems/ezpublish-kernel: ^7.5.2
- netgen/tagsbundle: ^3.3
Requires (Dev)
- phpunit/phpunit: ^6.5
README
Gie Facet Bundle
此捆绑包将帮助您执行和检索分面搜索。
如何使用它
1. 初始化分面搜索助手
在您的控制器操作中,只需调用gie.facet.search.helper即可。
默认情况下,此捆绑包中设置了两个分面搜索助手
- ContentTypeFacetSearchHelper,别名为content_type
- TagsFacetSearchHelper,别名为tags,基于netgen/tagsbundle
调用分面搜索助手后,您需要使用两个参数调用init方法
- 一个包含分面FacetConfig对象的数组
- 当前请求
FacetConfig对象是通过分面助手别名、标题和分面参数数组构建的
solr_field分面可以根据field参数定义的任何Solr字段对查询进行分面。格式化函数可以帮助格式化用户显示的值
init方法还将检查queryString并初始化选定的分面。如果您不希望这样做,可以避免传递请求对象。然后使用setFacetFilters()方法设置所需的任何选定的分面。
$facetSearchHelper = $this->container->get('gie.facet.search.helper') ->init(new FacetConfig('Content types', ContentTypeFacetSearchHelper::class, [ 'minCount' => 2, 'limit' => 5, ]), new FacetConfig('Key Words', TagFacetSearchHelper::class, [ 'minCount' => 1, 'limit' => 5, ]), new FacetConfig('custom_date', 'Publication date'), new FacetConfig('solr_field', 'Year', ['field' => 'meta_year_date_dt', 'format' => function($value){ $date = new \DateTime($value); return $date->format('Y');} ]), ], $request);
2. 构建查询
完成后,构建您的查询,不要添加任何分面或过滤器条件,并将其传递给分面助手。
$query = $facetSearchHelper->addQueryFacets($query);
3. 获取要发送到模板的分面数组
在更新查询以包含分面设置和最终选定的分面中的过滤器后,您需要调用getFacets方法来获取分面数组。
1. 使用PagerFanta
如果您需要PagerFanta工具,则可以将其传递给分面助手。
当使用PagerFanta时,您必须使用捆绑包ContentSearchAdapter,否则您将无法从正在执行的查询中获取分面。
use Gie\FacetBuilder\Pagination\Pagerfanta\ContentSearchAdapter;
$facets = $facetSearchHelper->getFacetsFromPager($pager);
2. 从QueryResult
如果您只是使用ContentQuery,则可以将结果传递给分面助手并调用
$facets = $facetHelper->getFacetsFromQuery($queryResult);
4. 将分面传递到模板
最后,您需要检索要传递到模板的分面数组,以便按您希望的任何方式显示它们。
array:2 [▼ "Facet Name" => array [▼ 0 => array [▼ "name" => "Facet Value Name" "key" => "facet_generate_key" "count" => count "querystring" => "querystring" /* query string to add to the request */ "selected" => true|false ] .../... ] ]