/**
  * Map field value to a proper Solr representation.
  *
  * @param Criterion $criterion
  * @param CriterionVisitor $subVisitor
  *
  * @return string
  */
 public function visit(Criterion $criterion, CriterionVisitor $subVisitor = null)
 {
     if (!isset($criterion->criteria[0]) || count($criterion->criteria) > 1) {
         throw new \RuntimeException('Invalid aggregation in LogicalNot criterion.');
     }
     return '(*:* NOT ' . $subVisitor->visit($criterion->criteria[0]) . ')';
 }
 public function convert(Query $query)
 {
     $params = array('defType' => 'edismax', 'q' => '{!lucene}' . $this->criterionVisitor->visit($query->query), 'fq' => '{!lucene}' . $this->criterionVisitor->visit($query->filter), 'sort' => $this->getSortClauses($query->sortClauses), 'start' => $query->offset, 'rows' => $query->limit, 'fl' => '*,score,[shard]', 'wt' => 'json');
     $facetParams = $this->getFacetParams($query->facetBuilders);
     if (!empty($facetParams)) {
         $params['facet'] = 'true';
         $params['facet.sort'] = 'count';
         $params = array_merge($facetParams, $params);
     }
     return $params;
 }
 /**
  * Map field value to a proper Solr representation.
  *
  * @param Criterion $criterion
  * @param CriterionVisitor $subVisitor
  *
  * @return string
  */
 public function visit(Criterion $criterion, CriterionVisitor $subVisitor = null)
 {
     /** @var \eZ\Publish\API\Repository\Values\Content\Query\Criterion\LogicalAnd $criterion */
     if (!isset($criterion->criteria[0])) {
         throw new RuntimeException('Invalid aggregation in LogicalAnd criterion.');
     }
     $subCriteria = array_map(function ($value) use($subVisitor) {
         return $subVisitor->visit($value);
     }, $criterion->criteria);
     if (count($subCriteria) === 1) {
         return reset($subCriteria);
     }
     return '(' . implode(' AND ', $subCriteria) . ')';
 }
 /**
  * Map field value to a proper Solr representation.
  *
  * @param Criterion $criterion
  * @param CriterionVisitor $subVisitor
  *
  * @return string
  */
 public function visit(Criterion $criterion, CriterionVisitor $subVisitor = null)
 {
     return '(' . implode(' OR ', array_map(function ($value) use($subVisitor) {
         return $subVisitor->visit($value);
     }, $criterion->criteria)) . ')';
 }