<?php include "bootstrap.php"; $options = array('hostname' => SOLR_SERVER_HOSTNAME, 'login' => SOLR_SERVER_USERNAME, 'password' => SOLR_SERVER_PASSWORD, 'port' => SOLR_SERVER_PORT, 'path' => SOLR_SERVER_PATH); $client = new SolrClient($options); $query = new SolrQuery('*:*'); $query->setFacet(true); $query->addFacetQuery('price:[* TO 500]')->addFacetQuery('price:[500 TO *]'); $query_response = $client->query($query); $response = $query_response->getResponse(); print_r($response->facet_counts->facet_queries);
<?php $query = new SolrQuery(); $query->setFacet(0); $query->addFacetField('israel')->addFacetField('israel2'); $query->addFacetQuery('silk')->addFacetQuery('name:june'); $query->setFacetPrefix('A')->setFacetPrefix('C', 'june'); $query->setFacetSort(1)->setFacetSort(0, 'june'); // $query->setFacetLimit(98)->setFacetLimit(44, 'june'); $query->setFacetOffset(110)->setFacetOffset(12, 'june'); $query->setFacetMinCount(4)->setFacetMinCount(30, 'june'); $query->setFacetMissing(1)->setFacetMissing(0, 'june'); $query->setFacetMethod('enum')->setFacetMethod('fc', 'june'); echo $query; echo "\n";
private function find_response() { if (!isset($this->query)) { throw new SolrException('SolrAccessor Exception: query undefined', '7700'); } $query = new SolrQuery(); $query->setQuery($this->query); $query->addField($this->mapping['key']); if (is_array($this->fields)) { foreach ($this->fields as $field) { $query->addField($field); } } if (is_array($this->filters)) { foreach ($this->filters as $field => $value) { $query->addFilterQuery("{$field}:{$value}"); } } if (is_array($this->sorts)) { foreach ($this->sorts as $field => $type) { $query->addSortField($field, $type); } } if (is_array($this->query_field) && !empty($this->query_field)) { $arrQueryFields = array(); foreach ($this->query_field as $field => $boost) { $arrQueryFields[] = $field . '^' . $boost; } $query->setParam('qf', implode(' ', $arrQueryFields)); $query->setParam('qt', 'dismax'); } if (isset($this->start)) { $query->setStart($this->start); } if (isset($this->rows)) { $query->setRows($this->rows); } if (is_array($this->facets)) { $query->setFacet(true); $query->setFacetMinCount($this->facet_min_count); foreach ($this->facets as $facet) { $query->addFacetField($facet['filed']); if (isset($facet['limit'])) { $limit = intval($facet['limit']); $query->setFacetLimit($limit); } if (isset($facet['sort'])) { $sort = $facet['sort'] == 'index' ? $query::FACET_SORT_INDEX : $query::FACET_SORT_COUNT; $query->setFacetSort($sort, $facet['filed']); } } } if (!empty($this->facet_query_array) && is_array($this->facet_query_array)) { $query->setFacet(true); $query->setFacetMinCount($this->facet_min_count); foreach ($this->facet_query_array as $valFacetQuery) { $query->addFacetQuery($valFacetQuery); } } $client = MPF_Solr_Factory::get_instance()->get_client($this->mapping['instance']); $response = $client->query($query); $debug = explode("\n", $client->getDebug()); //TODO use getRawRequest instead of debug $raw_request = @$debug[13]; if (substr($raw_request, 0, 2) != 'q=') { $raw_request = @$debug[12]; } MPF::get_instance()->debug(__CLASS__ . '::' . __FUNCTION__ . ':' . @$response->getRequestUrl() . '&' . $raw_request); return $response->getResponse(); }
function query_direct($args) { $solr = $this->solr->get($this->core); switch ($this->method) { case 'add': isset($args['_documents']) or backend_error('bad_query', 'Solr _documents argument missing'); $docs = []; foreach ($args['_documents'] as $name => $value) { if (is_array($value)) { if ($value === array_values($value)) { foreach ($value as $document) { $docs[] = self::add($document); } } else { $docs[] = self::add($value); } } else { if (is_object($value)) { $docs[] = self::add(get_object_vars($value)); } else { backend_error('bad_args', 'Bad Solr document: ' . $name); } } } $solr->addDocuments($docs); $solr->request("<commit/>"); break; case 'delete': $solr->deleteByQuery(self::substitute($this->body, $args)); $solr->request("<commit/>"); break; case 'query': $query = new SolrQuery(self::substitute($this->body, $args)); foreach ($this->order_by as $name => $mode) { if ($mode->type == 'normal') { $query->addSortField($name, $mode->order == 'desc' ? SolrQuery::ORDER_DESC : SolrQuery::ORDER_ASC); } elseif ($mode->type == 'spatial') { $query->setParam('spatial', true); $query->setParam('sfield', $name); if (isset($mode->point)) { $query->setParam('pt', $args[$mode->point]); } $query->setParam('sort', self::substitute($mode->order, $args)); } } $offset = isset($args['_offset']) ? $args['_offset'] : $this->offset; $count = isset($args['_count']) ? $args['_count'] : $this->count; is_null($offset) or $query->setStart($offset); is_null($count) or $query->setRows($count); if (isset($args['_fields']) or isset($args['_queries'])) { $query->setFacet(true); if (isset($args['_fields'])) { foreach ($args['_fields'] as $field) { $query->addFacetField($field); } } if (isset($args['_queries'])) { foreach ($args['_queries'] as $fq) { $query->addFacetQuery($fq); } } } $result = new stdClass(); $result->matched = 0; $result->documents = []; $result->fields = new stdClass(); $result->queries = new stdClass(); $response = $solr->query($query); $object = $response->getResponse(); if (is_array($object['response']['docs'])) { $result->matched = $object['response']['numFound']; foreach ($object['response']['docs'] as $doc) { $document = new stdClass(); foreach ($doc as $name => $value) { if ($name != '_version_') { if (is_array($value)) { $items = []; foreach ($value as $item) { $items[] = $item; } $document->{$name} = $items; } else { $document->{$name} = $value; } } } $result->documents[] = $document; } } else { !$this->required or backend_error('bad_input', 'Empty response from Solr procedure'); } if (isset($args['_fields'])) { foreach ($object['facet_counts']['facet_fields'] as $name => $counts) { $array = []; foreach ($counts as $value => $count) { $array[$value] = $count; } $result->fields->{$name} = (object) $array; } } if (isset($args['_queries'])) { foreach ($object['facet_counts']['facet_queries'] as $fq => $count) { $result->queries->{$fq} = $count; } } switch ($this->result) { case 'array': return empty($result) ? (object) ['matched' => 0, 'documents' => [], 'fields' => (object) null, 'queries' => (object) null] : $result; case 'object': if ($result->matched == 1 and count($result->documents) == 1) { return $result->documents[0]; } elseif ($result->matched == 0 and count($result->documents) == 0) { return null; } else { backend_error('bad_query', 'Solr query result is not an object'); } default: backend_error('bad_query', 'Unsupported Solr query result type: ' . $this->result); } } }