Commit 0d17a1dd authored by Josh Turmel's avatar Josh Turmel

Add extract from response capability for facets

* Since some Solr setups might configure their facets in
  solrconfig.xml, this option allows you to tell the
  response builder to construct the facet response from
  what is actually returned in the response rather than having
  to define it in the query object first.
parent 0ed951d3
...@@ -55,6 +55,29 @@ class Solarium_Client_ResponseParser_Select_Component_FacetSet ...@@ -55,6 +55,29 @@ class Solarium_Client_ResponseParser_Select_Component_FacetSet
*/ */
public function parse($query, $facetSet, $data) public function parse($query, $facetSet, $data)
{ {
if ($facetSet->getExtractFromResponse() === true) {
if (empty($data['facet_counts']) === false) {
foreach ($data['facet_counts'] as $key => $facets) {
switch ($key) {
case 'facet_fields':
$method = 'createFacetField';
break;
case 'facet_queries':
$method = 'createFacetQuery';
break;
case 'facet_ranges':
$method = 'createFacetRange';
break;
default:
continue;
}
foreach ($facets as $k => $facet) {
$facetSet->$method($k);
}
}
}
}
$facets = array(); $facets = array();
foreach ($facetSet->getFacets() AS $key => $facet) { foreach ($facetSet->getFacets() AS $key => $facet) {
switch ($facet->getType()) { switch ($facet->getType()) {
...@@ -187,3 +210,4 @@ class Solarium_Client_ResponseParser_Select_Component_FacetSet ...@@ -187,3 +210,4 @@ class Solarium_Client_ResponseParser_Select_Component_FacetSet
} }
} }
...@@ -110,7 +110,9 @@ class Solarium_Query_Select_Component_FacetSet extends Solarium_Query_Select_Com ...@@ -110,7 +110,9 @@ class Solarium_Query_Select_Component_FacetSet extends Solarium_Query_Select_Com
*/ */
protected function _init() protected function _init()
{ {
if (isset($this->_options['facet'])) { foreach ($this->_options AS $name => $value) {
switch ($name) {
case 'facet':
foreach ($this->_options['facet'] AS $key => $config) { foreach ($this->_options['facet'] AS $key => $config) {
if (!isset($config['key'])) { if (!isset($config['key'])) {
$config['key'] = $key; $config['key'] = $key;
...@@ -118,8 +120,35 @@ class Solarium_Query_Select_Component_FacetSet extends Solarium_Query_Select_Com ...@@ -118,8 +120,35 @@ class Solarium_Query_Select_Component_FacetSet extends Solarium_Query_Select_Com
$this->addFacet($config); $this->addFacet($config);
} }
break;
case 'extractfromresponse':
$this->setExtractFromResponse($value);
break;
} }
} }
}
/**
* Allow extraction of facets without having to define
* them on the query
*
* @param boolean $extract
* @return Solarium_Query_Select_Component_FacetSet Provides fluent interface
*/
public function setExtractFromResponse($extract)
{
return $this->_setOption('extractfromresponse', $extract);
}
/**
* Get the extractfromresponse option value
*
* @return boolean
*/
public function getExtractFromResponse()
{
return $this->getOption('extractfromresponse');
}
/** /**
* Limit the terms for faceting by a prefix * Limit the terms for faceting by a prefix
...@@ -452,3 +481,4 @@ class Solarium_Query_Select_Component_FacetSet extends Solarium_Query_Select_Com ...@@ -452,3 +481,4 @@ class Solarium_Query_Select_Component_FacetSet extends Solarium_Query_Select_Com
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment