0

我无法向查询添加方面。我试试

$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\Values\Content\Query\FacetBuilder\FieldFacetBuilder”

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

我做错了什么?

4

2 回答 2

0

您需要交出要应用刻面的字段。在您的情况下,它可能如下所示:

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

“article”是要过滤的类的类型标识符。我还没有尝试过你是否可以在没有类限制的情况下实际使用它。“title”定义了用于构面的字段标识符。

您还可以使用regexor sort(除了fieldPaths-key 来过滤和排序结果。可能的值在-classsort中作为常量列出FieldFacetBuilder

希望这可以帮助。

于 2016-03-08T11:51:33.960 回答
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

于 2017-04-11T13:01:32.960 回答