/** * 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)) . ')'; }