diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchOptions.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchOptions.php index e090fc608b..b94ea3c8d3 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchOptions.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchOptions.php @@ -284,11 +284,20 @@ class ElasticsearchOptions 'label' => 'Aperture', 'field' => 'metadata_tags.Aperture', 'query' => 'meta.Aperture=%s', + 'output_formatter' => function($value) { + return round($value, 1); + }, ], 'shutterspeed_aggregate' => [ 'label' => 'Shutter speed', 'field' => 'metadata_tags.ShutterSpeed', 'query' => 'meta.ShutterSpeed=%s', + 'output_formatter' => function($value) { + if($value < 1.0 && $value != 0) { + $value = '1/' . round(1.0 / $value); + } + return $value . ' s.'; + }, ], 'flashfired_aggregate' => [ 'label' => 'FlashFired', @@ -297,6 +306,10 @@ class ElasticsearchOptions 'choices' => [ "aggregated (2 values: fired = 0 or 1)" => -1, ], + 'output_formatter' => function($value) { + static $map = ['0'=>"No flash", '1'=>"Flash"]; + return array_key_exists($value, $map) ? $map[$value] : $value; + }, ], 'framerate_aggregate' => [ 'label' => 'FrameRate', diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/FacetsResponse.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/FacetsResponse.php index 0d4cd60e93..a70e5c724a 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/FacetsResponse.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/FacetsResponse.php @@ -7,6 +7,7 @@ use Alchemy\Phrasea\SearchEngine\Elastic\ElasticsearchOptions; use Alchemy\Phrasea\SearchEngine\Elastic\Structure\Structure; use Alchemy\Phrasea\SearchEngine\SearchEngineSuggestion; use Doctrine\Common\Collections\ArrayCollection; +use igorw; class FacetsResponse { @@ -55,12 +56,21 @@ class FacetsResponse private function buildBucketsValues($name, $buckets) { $values = array(); + + // does this aggregate has an output_formatter ? if not use a equality formatter + /** @var callable $formatter */ + $formatter = igorw\get_in( + ElasticsearchOptions::getAggregableTechnicalFields(), [$name, 'output_formatter'], + function($v){return $v;} + ); + foreach ($buckets as $bucket) { if (!isset($bucket['key']) || !isset($bucket['doc_count'])) { $this->throwAggregationResponseError(); } + $values[] = array( - 'value' => $bucket['key'], + 'value' => $formatter($bucket['key']), 'count' => $bucket['doc_count'], 'query' => $this->buildQuery($name, $bucket['key']), );