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