return facets following the order defined in conf.

This commit is contained in:
Jean-Yves Gaulier
2020-01-29 18:39:15 +01:00
parent 53f17e1897
commit 20839f1dd7
7 changed files with 28 additions and 50 deletions

View File

@@ -360,6 +360,7 @@ class QueryController extends Controller
// add technical fields // add technical fields
$fieldsInfosByName = []; $fieldsInfosByName = [];
foreach(ElasticsearchOptions::getAggregableTechnicalFields() as $k => $f) { foreach(ElasticsearchOptions::getAggregableTechnicalFields() as $k => $f) {
$k = '_'.$k;
$fieldsInfosByName[$k] = $f; $fieldsInfosByName[$k] = $f;
$fieldsInfosByName[$k]['trans_label'] = $this->app->trans($f['label']); $fieldsInfosByName[$k]['trans_label'] = $this->app->trans($f['label']);
$fieldsInfosByName[$k]['labels'] = []; $fieldsInfosByName[$k]['labels'] = [];
@@ -433,24 +434,15 @@ class QueryController extends Controller
// populates facets (aggregates) // populates facets (aggregates)
$facets = []; $facets = [];
// $facetClauses = [];
foreach ($result->getFacets() as $facet) { foreach ($result->getFacets() as $facet) {
$facetName = $facet['name']; $facetName = $facet['name'];
if(array_key_exists($facetName, $fieldsInfosByName)) { if(array_key_exists($facetName, $fieldsInfosByName)) {
$f = $fieldsInfosByName[$facetName]; $f = $fieldsInfosByName[$facetName];
$facet['label'] = $f['trans_label']; $facet['label'] = $f['trans_label'];
$facet['labels'] = $f['labels']; $facet['labels'] = $f['labels'];
$facet['type'] = strtoupper($f['type']) . "-AGGREGATE"; $facet['type'] = strtoupper($f['type']) . "-AGGREGATE";
$facets[] = $facet; $facets[] = $facet;
// $facetClauses[] = [
// 'type' => strtoupper($f['type']) . "-AGGREGATE",
// 'field' => $f['field'],
// 'facet' => $facet
// ];
} }
} }

View File

@@ -97,7 +97,7 @@ class SearchEngineServiceProvider implements ServiceProviderInterface
}); });
$app['elasticsearch.facets_response.factory'] = $app->protect(function (array $response) use ($app) { $app['elasticsearch.facets_response.factory'] = $app->protect(function (array $response) use ($app) {
return new FacetsResponse(new Escaper(), $response, $app['search_engine.structure']); return new FacetsResponse($app['elasticsearch.options'], new Escaper(), $response, $app['search_engine.structure']);
}); });
return $app; return $app;

View File

@@ -663,22 +663,25 @@ class ElasticSearchEngine implements SearchEngineInterface
'size' => $size 'size' => $size
] ]
]; ];
$aggs[$k] = $agg; $aggs['_'.$k] = $agg;
} }
} }
// fields aggregates // fields aggregates
$structure = $this->context_factory->getLimitedStructure($options); $structure = $this->context_factory->getLimitedStructure($options);
foreach ($structure->getFacetFields() as $name => $field) { foreach($structure->getAllFields() as $name => $field) {
// 2015-05-26 (mdarse) Removed databox filtering. $size = $this->options->getAggregableFieldLimit($name);
// It was already done by the ACL filter in the query scope, so no if ($size !== databox_field::FACET_DISABLED) {
// document that shouldn't be displayed can go this far. if ($size === databox_field::FACET_NO_LIMIT) {
$agg = [ $size = ESField::FACET_NO_LIMIT;
'terms' => [ }
'field' => $field->getIndexField(true), $agg = [
'size' => $field->getFacetValuesLimit() 'terms' => [
] 'field' => $field->getIndexField(true),
]; 'size' => $size
$aggs[$name] = AggregationHelper::wrapPrivateFieldAggregation($field, $agg); ]
];
$aggs[$name] = AggregationHelper::wrapPrivateFieldAggregation($field, $agg);
}
} }
return $aggs; return $aggs;

View File

@@ -15,7 +15,7 @@ class FacetsResponse
private $escaper; private $escaper;
private $facets = array(); private $facets = array();
public function __construct(Escaper $escaper, array $response, GlobalStructure $structure) public function __construct(ElasticsearchOptions $options, Escaper $escaper, array $response, GlobalStructure $structure)
{ {
$this->escaper = $escaper; $this->escaper = $escaper;
@@ -25,7 +25,13 @@ class FacetsResponse
$atf = ElasticsearchOptions::getAggregableTechnicalFields(); $atf = ElasticsearchOptions::getAggregableTechnicalFields();
foreach ($response['aggregations'] as $name => $aggregation) { // sort facets respecting the order defined in options
foreach($options->getAggregableFields() as $name=>$foptions) {
if(!array_key_exists($name, $response['aggregations'])) {
continue;
}
$aggregation = $response['aggregations'][$name];
$tf = null; $tf = null;
$valueFormatter = function($v){ return $v; }; // default equality formatter $valueFormatter = function($v){ return $v; }; // default equality formatter
@@ -78,6 +84,7 @@ class FacetsResponse
]; ];
} }
} }
} }

View File

@@ -35,11 +35,6 @@ final class GlobalStructure implements Structure
*/ */
private $private = array(); private $private = array();
/**
* @var Field[]
*/
private $facets = array();
/** /**
* @var Flag[] * @var Flag[]
*/ */
@@ -145,9 +140,11 @@ final class GlobalStructure implements Structure
$this->private[$name] = $field; $this->private[$name] = $field;
} }
/*
if ($field->isFacet() && $field->isSearchable()) { if ($field->isFacet() && $field->isSearchable()) {
$this->facets[$name] = $field; $this->facets[$name] = $field;
} }
*/
if ($field->hasConceptInference()) { if ($field->hasConceptInference()) {
$this->thesaurus_fields[$name] = $field; $this->thesaurus_fields[$name] = $field;
@@ -183,14 +180,6 @@ final class GlobalStructure implements Structure
return $this->private; return $this->private;
} }
/**
* @return Field[]
*/
public function getFacetFields()
{
return $this->facets;
}
/** /**
* @return Field[] * @return Field[]
*/ */

View File

@@ -47,14 +47,6 @@ final class LimitedStructure implements Structure
return $this->limit($this->structure->getPrivateFields()); return $this->limit($this->structure->getPrivateFields());
} }
/**
* @return Field[]
*/
public function getFacetFields()
{
return $this->limit($this->structure->getFacetFields());
}
public function getThesaurusEnabledFields() public function getThesaurusEnabledFields()
{ {
return $this->limit($this->structure->getThesaurusEnabledFields()); return $this->limit($this->structure->getThesaurusEnabledFields());

View File

@@ -33,11 +33,6 @@ interface Structure
*/ */
public function getPrivateFields(); public function getPrivateFields();
/**
* @return Field[]
*/
public function getFacetFields();
/** /**
* @return Field[] * @return Field[]
*/ */