public function searchDisjunctiveFaceting($query, $disjunctive_facets, $params = array(), $refinements = array())
{
if (gettype($disjunctive_facets) != 'string' && gettype($disjunctive_facets) != 'array') {
throw new AlgoliaException('Argument "disjunctive_facets" must be a String or an Array');
}
if (gettype($refinements) != 'array') {
throw new AlgoliaException('Argument "refinements" must be a Hash of Arrays');
}
if (gettype($disjunctive_facets) == 'string') {
$disjunctive_facets = explode(',', $disjunctive_facets);
}
$disjunctive_refinements = array();
foreach ($refinements as $key => $value) {
if (in_array($key, $disjunctive_facets)) {
$disjunctive_refinements[$key] = $value;
}
}
$queries = array();
$filters = array();
foreach ($refinements as $key => $value) {
$r = array_map(function ($val) use($key) {
return $key . ':' . $val;
}, $value);
if (in_array($key, $disjunctive_refinements)) {
$filter = array_merge($filters, $r);
} else {
array_push($filters, $r);
}
}
$params['indexName'] = $this->indexName;
$params['query'] = $query;
$params['facetFilters'] = $filters;
array_push($queries, $params);
foreach ($disjunctive_facets as $disjunctive_facet) {
$filters = array();
foreach ($refinements as $key => $value) {
if ($key != $disjunctive_facet) {
$r = array_map(function ($val) use($key) {
return $key . ':' . $val;
}, $value);
if (in_array($key, $disjunctive_refinements)) {
$filter = array_merge($filters, $r);
} else {
array_push($filters, $r);
}
}
}
$params['indexName'] = $this->indexName;
$params['query'] = $query;
$params['facetFilters'] = $filters;
$params['page'] = 0;
$params['hitsPerPage'] = 0;
$params['attributesToRetrieve'] = array();
$params['attributesToHighlight'] = array();
$params['attributesToSnippet'] = array();
$params['facets'] = $disjunctive_facet;
$params['analytics'] = false;
array_push($queries, $params);
}
$answers = $this->client->multipleQueries($queries);
$aggregated_answer = $answers['results'][0];
$aggregated_answer['disjunctiveFacets'] = array();
for ($i = 1; $i < count($answers['results']); $i++) {
foreach ($answers['results'][$i]['facets'] as $key => $facet) {
$aggregated_answer['disjunctiveFacets'][$key] = $facet;
if (!in_array($key, $disjunctive_refinements)) {
continue;
}
foreach ($disjunctive_refinements[$key] as $r) {
if (is_null($aggregated_answer['disjunctiveFacets'][$key][$r])) {
$aggregated_answer['disjunctiveFacets'][$key][$r] = 0;
}
}
}
}
return $aggregated_answer;
}