コード例 #1
0
 /**
  * Adds filter queries for active facets to $query.
  *
  * @param array $arguments request arguments
  * @return array
  */
 protected function addFacetFilters($arguments)
 {
     $activeFacets = $this->getActiveFacets($arguments);
     $activeFacetsForTemplate = [];
     foreach ($activeFacets as $facetID => $facets) {
         foreach ($facets as $facetTerm => $facetInfo) {
             $facetQuery = $this->getFacetQuery($this->getFacetConfig($facetID), $facetTerm);
             if ($facetInfo['config']['queryStyle'] === 'and') {
                 // TODO: Do we really use this part of the condition? Can it be removed?
                 // Alternative query style: adding a conjunction to the main query.
                 // Can be useful when using {!join} to filter on the underlying
                 // records instead of the joined ones.
                 $queryString = $this->query->getQuery();
                 if ($queryString) {
                     $queryString = $queryString . ' ' . Query::QUERY_OPERATOR_AND . ' ';
                 }
                 $queryString .= $facetQuery;
                 $this->query->setQuery($queryString);
             } else {
                 // Add a filter query by default.
                 // Add tag/key when configured to excludeOwnFilter for this facet.
                 // Do not add it otherwise as the additional {!tag …} prepended to the Solr query
                 // will break usage of {!join …} in the query.
                 $queryInfo = ['key' => 'facet-' . $facetID . '-' . $facetTerm];
                 if ($facetInfo['config']['excludeOwnFilter'] && $facetQuery) {
                     $queryInfo['tag'] = $this->tagForFacet($facetID);
                 }
                 $this->query->createFilterQuery($queryInfo)->setQuery($facetQuery);
             }
             $activeFacetsForTemplate[$facetID][$facetTerm] = $facetInfo;
         }
     }
     return $activeFacetsForTemplate;
 }
コード例 #2
0
 public function testConfigMode()
 {
     $config = array('query' => 'text:mykeyword', 'sort' => array('score' => 'asc'), 'fields' => array('id', 'title', 'category'), 'rows' => 100, 'start' => 200, 'filterquery' => array(array('key' => 'pub', 'tag' => array('pub'), 'query' => 'published:true'), 'online' => array('tag' => 'onl', 'query' => 'online:true')), 'component' => array('facetset' => array('facet' => array(array('type' => 'field', 'key' => 'categories', 'field' => 'category'), 'category13' => array('type' => 'query', 'query' => 'category:13')))), 'resultclass' => 'MyResultClass', 'documentclass' => 'MyDocumentClass', 'tag' => array('t1', 't2'));
     $query = new Query($config);
     $this->assertEquals($config['query'], $query->getQuery());
     $this->assertEquals($config['sort'], $query->getSorts());
     $this->assertEquals($config['fields'], $query->getFields());
     $this->assertEquals($config['rows'], $query->getRows());
     $this->assertEquals($config['start'], $query->getStart());
     $this->assertEquals($config['documentclass'], $query->getDocumentClass());
     $this->assertEquals($config['resultclass'], $query->getResultClass());
     $this->assertEquals('published:true', $query->getFilterQuery('pub')->getQuery());
     $this->assertEquals('online:true', $query->getFilterQuery('online')->getQuery());
     $facets = $query->getFacetSet()->getFacets();
     $this->assertEquals('category', $facets['categories']->getField());
     $this->assertEquals('category:13', $facets['category13']->getQuery());
     $components = $query->getComponents();
     $this->assertEquals(1, count($components));
     $this->assertThat(array_pop($components), $this->isInstanceOf('Solarium\\QueryType\\Select\\Query\\Component\\FacetSet'));
     $this->assertEquals(array('t1', 't2'), $query->getTags());
 }