2016-03-01 5 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 \ Publish \ API \ Repository \ Значения \ Content \ Query \ 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» определяет идентификатор поля для использования для грани.

Вы можете также использовать regex или sort (в дополнении к fieldPaths -Key для фильтрации и сортировки результатов. Возможных значения sort перечислены как константы в FieldFacetBuilder -класс

Надеется, что это помогает.

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

Смежные вопросы