【问题标题】:How to add facet to the query (solr)如何向查询添加方面 (solr)
【发布时间】:2016-06-13 22:03:05
【问题描述】:

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

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

我做错了什么?

【问题讨论】:

    标签: ezpublish ezplatform


    【解决方案1】:

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

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

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

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

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      如下配置你的字段类

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-25
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多