/**
  * Add filter query fields to the solarium query
  *
  * @param Query $solarium_query
  * @param array $filter_query_fields
  */
 private function add_filter_query_fields(Query $solarium_query, $filter_query_fields = array())
 {
     foreach ($filter_query_fields as $filter_query_field) {
         if (!empty($filter_query_field)) {
             $filter_query_field_array = explode(':', $filter_query_field);
             $filter_query_field_name = strtolower($filter_query_field_array[0]);
             $filter_query_field_value = isset($filter_query_field_array[1]) ? $filter_query_field_array[1] : '';
             if (!empty($filter_query_field_name) && !empty($filter_query_field_value)) {
                 $fac_fd = "{$filter_query_field_name}";
                 // In case the facet contains white space, we enclose it with "".
                 $filter_query_field_value_escaped = "\"{$filter_query_field_value}\"";
                 $solarium_query->addFilterQuery(array('key' => "{$fac_fd}:{$filter_query_field_value_escaped}", 'query' => "{$fac_fd}:{$filter_query_field_value_escaped}"));
             }
         }
     }
 }
Example #2
0
 public function testAddFilterQueryWithUsedKey()
 {
     $fq1 = new FilterQuery();
     $fq1->setKey('fq1')->setQuery('category:1');
     $fq2 = new FilterQuery();
     $fq2->setKey('fq1')->setQuery('category:2');
     $this->query->addFilterQuery($fq1);
     $this->setExpectedException('Solarium\\Exception\\InvalidArgumentException');
     $this->query->addFilterQuery($fq2);
 }
Example #3
-1
 public function testSelectUrlWithSortAndFilters()
 {
     $this->query->addSort('id', Query::SORT_ASC);
     $this->query->addSort('name', Query::SORT_DESC);
     $this->query->addFilterQuery(new FilterQuery(array('key' => 'f1', 'query' => 'published:true')));
     $this->query->addFilterQuery(new FilterQuery(array('key' => 'f2', 'tag' => array('t1', 't2'), 'query' => 'category:23')));
     $request = $this->builder->build($this->query);
     $this->assertEquals(null, $request->getRawData());
     $this->assertEquals('select?omitHeader=true&wt=json&json.nl=flat&q=*:*&start=0&rows=10&fl=*,score&sort=id asc,name desc' . '&fq=published:true&fq={!tag=t1,t2}category:23', urldecode($request->getUri()));
 }
 /**
  * Add filter query fields to the solarium query
  *
  * @param Query $solarium_query
  * @param array $filter_query_fields
  */
 private function add_filter_query_fields(Query $solarium_query, $filter_query_fields = array())
 {
     if ($this->is_galaxy_slave) {
         // Filter results by the slave filter
         array_push($filter_query_fields, sprintf('%s:%s', WpSolrSchema::_FIELD_NAME_BLOG_NAME_STR, $this->galaxy_slave_filter_value));
     }
     if ($filter_query_fields != null) {
         $query_fields = array();
         foreach ($filter_query_fields as $fq) {
             $fq = explode(':', $fq);
             $name = strtolower($fq[0]);
             $value = isset($fq[1]) ? $this->escape_solr_special_catacters($fq[1]) : '';
             if (trim($name) === '' | trim($value) === '') {
                 continue;
             }
             $this->get_facet_hierarchy_name(WpSolrSchema::_FIELD_NAME_NON_FLAT_HIERARCHY, $name);
             $query_fields[$name][] = '"' . $value . '"';
         }
         if ($query_fields != null) {
             foreach ($query_fields as $field => $values) {
                 $solarium_query->addFilterQuery(array('tag' => $field, 'key' => $field, 'query' => $field . ':(' . implode(' OR ', $values) . ')'));
             }
         }
     }
 }