/
BucketSelectorTest.php
97 lines (79 loc) · 3.04 KB
/
BucketSelectorTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
namespace Elastica\Test\Aggregation;
use Elastica\Aggregation\BucketSelector;
use Elastica\Aggregation\DateHistogram;
use Elastica\Aggregation\Max;
use Elastica\Document;
use Elastica\Query;
/**
* @internal
*/
class BucketSelectorTest extends BaseAggregationTest
{
/**
* @group unit
*/
public function testToArray(): void
{
$expected = [
'max' => [
'field' => 'value',
],
'aggs' => [
'selector_agg' => [
'bucket_selector' => [
'buckets_path' => ['max' => 'max_agg'],
'script' => 'params.max > 5',
],
],
],
];
$maxAgg = new Max('max_agg');
$maxAgg->setField('value');
$selectorAgg = new BucketSelector('selector_agg', ['max' => 'max_agg'], 'params.max > 5');
$maxAgg->addAggregation($selectorAgg);
$this->assertEquals($expected, $maxAgg->toArray());
}
/**
* @group functional
*/
public function testMaxAggregation(): void
{
$this->_checkVersion('7.2');
$index = $this->_getIndexForTest();
$dateHistogramAgg = new DateHistogram('histogram_agg', 'date');
$dateHistogramAgg->setFixedInterval('1d');
$dateHistogramAgg->setFormat('yyyy-MM-dd');
$maxAgg = new Max('max_agg');
$maxAgg->setField('value');
$dateHistogramAgg->addAggregation($maxAgg);
$bucketAgg = new BucketSelector('selector_agg', ['max' => 'max_agg'], 'params.max > 5');
$dateHistogramAgg->addAggregation($bucketAgg);
$query = new Query();
$query->addAggregation($dateHistogramAgg);
$dateHistogramAggResult = $index->search($query)->getAggregation('histogram_agg')['buckets'];
$this->assertCount(4, $dateHistogramAggResult);
$this->assertEquals(6, $dateHistogramAggResult[0]['max_agg']['value']);
$this->assertEquals(9, $dateHistogramAggResult[1]['max_agg']['value']);
$this->assertEquals(11, $dateHistogramAggResult[2]['max_agg']['value']);
$this->assertEquals(7, $dateHistogramAggResult[3]['max_agg']['value']);
}
protected function _getIndexForTest()
{
$index = $this->_createIndex();
$index->addDocuments([
new Document(1, ['date' => '2018-12-01', 'value' => 1]),
new Document(2, ['date' => '2018-12-02', 'value' => 2]),
new Document(3, ['date' => '2018-12-03', 'value' => 5]),
new Document(4, ['date' => '2018-12-04', 'value' => 4]),
new Document(5, ['date' => '2018-12-05', 'value' => 6]),
new Document(6, ['date' => '2018-12-06', 'value' => 9]),
new Document(7, ['date' => '2018-12-07', 'value' => 11]),
new Document(8, ['date' => '2018-12-08', 'value' => 4]),
new Document(9, ['date' => '2018-12-09', 'value' => 7]),
new Document(10, ['date' => '2018-12-10', 'value' => 4]),
]);
$index->refresh();
return $index;
}
}