2016-03-01 55 views
0

我无法将构面添加到查询中。我尝试如何向查询添加构面(solr)

$query = new Query; 
$query->facetBuilders = [ new \eZ\Publish\API\Repository\Values\Content\Query\FacetBuilder\FieldFacetBuilder]; 


services: 
    myservice: 
    class: mynamespace\FacetHandler 
    tags: 
     - {name: ezpublish.search.solr.content.facet_builder_visitor} 

而且我得到了错误 “故意不落实:没有游客为:的eZ \发布\ API \库\值\内容\查询\ FacetBuilder \ FieldFacetBuilder”

我也有试过标签“ezpublish.search.solr.content.facet_builder_visitor.aggregate”

我做错了什么?

回答

0

你需要交出你想应用这个方面的领域。 在你的情况可能是这样的:

$query = new Query; 
$query->facetBuilders = [ new \eZ\Publish\API\Repository\Values\Content\Query\FacetBuilder\FieldFacetBuilder(
    [ 
     'fieldPaths' => 'article/title' 
    ] 
)]; 

“文章”是类的类型标识符为筛选。我还没有尝试,如果你真的可以使用它没有类限制。 “title”定义了用于该方面的字段标识符。

您也可以使用regexsort(除fieldPaths - 键进行过滤和排序结果。 为sort的可能值列为FieldFacetBuilder -class

希望这有助于常数。

0

配置你的领域类,如下

parameters: 
    ezpublish.search.solr.query.content.facet_builder_visitor.field.class: Your\Bundle\Query\Content\FacetBuilderVisitor\Field 

如下定义服务:

ezpublish.search.solr.query.content.facet_builder_visitor.field: 
    class: "%ezpublish.search.solr.query.content.facet_builder_visitor.field.class%" 
    tags: 
     - {name: ezpublish.search.solr.query.content.facet_builder_visitor} 

实现类

<?php 

/** 
* 
*/ 
namespace Your\Bundle\Query\Content\FacetBuilderVisitor; 

use EzSystems\EzPlatformSolrSearchEngine\Query\FacetBuilderVisitor; 
use eZ\Publish\API\Repository\Values\Content\Query\FacetBuilder; 
use eZ\Publish\API\Repository\Values\Content\Search\Facet; 

/** 
* Visits the Field facet builder. 
*/ 
class Field extends FacetBuilderVisitor 
{ 
    /** 
    * CHeck if visitor is applicable to current facet result. 
    * 
    * @param string $field 
    * 
    * @return bool 
    */ 
    public function canMap($field) 
    { 
     return $field === 'field_id'; 
    } 

    /** 
    * Map Solr facet result back to facet objects. 
    * 
    * @param string $field 
    * @param array $data 
    * 
    * @return Facet 
    */ 
    public function map($field, array $data) 
    { 
     return new Facet\FieldFacet(
      array(
       'name' => 'field', 
       'entries' => $this->mapData($data), 
      ) 
     ); 
    } 

    /** 
    * Check if visitor is applicable to current facet builder. 
    * 
    * @param FacetBuilder $facetBuilder 
    * 
    * @return bool 
    */ 
    public function canVisit(FacetBuilder $facetBuilder) 
    { 
     return $facetBuilder instanceof FacetBuilder\FieldFacetBuilder; 
    } 

    /** 
    * Map field value to a proper Solr representation. 
    * 
    * @param FacetBuilder $facetBuilder; 
    * 
    * @return string 
    */ 
    public function visit(FacetBuilder $facetBuilder) 
    { 
     return array(
      'facet.field' => 'field_id', 
      'f.field_id.facet.limit' => $facetBuilder->limit, 
      'f.field_id.facet.mincount' => $facetBuilder->minCount, 
     ); 
    } 
} 

没有更多的例外,现在;),但不工作:“(https://doc.ez.no/display/DEVELOPER/Browsing%2C+finding%2C+viewing#Browsing,finding,viewing-PerformingaFacetedSearch