port better agregate to 4.1

This commit is contained in:
aina-esokia
2018-05-29 15:25:42 +04:00
parent a01f778e03
commit 93ad45dd91
2 changed files with 24 additions and 1 deletions

View File

@@ -284,11 +284,20 @@ class ElasticsearchOptions
'label' => 'Aperture', 'label' => 'Aperture',
'field' => 'metadata_tags.Aperture', 'field' => 'metadata_tags.Aperture',
'query' => 'meta.Aperture=%s', 'query' => 'meta.Aperture=%s',
'output_formatter' => function($value) {
return round($value, 1);
},
], ],
'shutterspeed_aggregate' => [ 'shutterspeed_aggregate' => [
'label' => 'Shutter speed', 'label' => 'Shutter speed',
'field' => 'metadata_tags.ShutterSpeed', 'field' => 'metadata_tags.ShutterSpeed',
'query' => 'meta.ShutterSpeed=%s', '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' => [ 'flashfired_aggregate' => [
'label' => 'FlashFired', 'label' => 'FlashFired',
@@ -297,6 +306,10 @@ class ElasticsearchOptions
'choices' => [ 'choices' => [
"aggregated (2 values: fired = 0 or 1)" => -1, "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' => [ 'framerate_aggregate' => [
'label' => 'FrameRate', 'label' => 'FrameRate',

View File

@@ -7,6 +7,7 @@ use Alchemy\Phrasea\SearchEngine\Elastic\ElasticsearchOptions;
use Alchemy\Phrasea\SearchEngine\Elastic\Structure\Structure; use Alchemy\Phrasea\SearchEngine\Elastic\Structure\Structure;
use Alchemy\Phrasea\SearchEngine\SearchEngineSuggestion; use Alchemy\Phrasea\SearchEngine\SearchEngineSuggestion;
use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\ArrayCollection;
use igorw;
class FacetsResponse class FacetsResponse
{ {
@@ -55,12 +56,21 @@ class FacetsResponse
private function buildBucketsValues($name, $buckets) private function buildBucketsValues($name, $buckets)
{ {
$values = array(); $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) { foreach ($buckets as $bucket) {
if (!isset($bucket['key']) || !isset($bucket['doc_count'])) { if (!isset($bucket['key']) || !isset($bucket['doc_count'])) {
$this->throwAggregationResponseError(); $this->throwAggregationResponseError();
} }
$values[] = array( $values[] = array(
'value' => $bucket['key'], 'value' => $formatter($bucket['key']),
'count' => $bucket['doc_count'], 'count' => $bucket['doc_count'],
'query' => $this->buildQuery($name, $bucket['key']), 'query' => $this->buildQuery($name, $bucket['key']),
); );