如何将facet添加到查询中(solr)

时间:2016-03-01 13:03:26

标签: ezpublish ezplatform

我无法在查询中添加构面。我试试

$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"

我做错了什么?

2 个答案:

答案 0 :(得分:0)

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

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

"物品"是要过滤的类的类型标识符。如果没有类限制你可以实际使用它,我还没有尝试过。 "标题"定义用于构面的字段标识符。

您还可以使用regexsort(除了fieldPaths - 键来过滤和排序结果。 sort的可能值在FieldFacetBuilder - 类

中列为常量

希望这有帮助。

答案 1 :(得分: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,
        );
    }
}

现在不再例外;)但不起作用:&#39;(https://doc.ez.no/display/DEVELOPER/Browsing%2C+finding%2C+viewing#Browsing,finding,viewing-PerformingaFacetedSearch