Skip to content

Commit

Permalink
V7 Cardinality Aggregation
Browse files Browse the repository at this point in the history
  • Loading branch information
Kapitanov Andrey committed Feb 9, 2024
1 parent 9936cc0 commit dd459ea
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 0 deletions.
37 changes: 37 additions & 0 deletions src/Aggregating/Metrics/CardinalityAggregation.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?php

namespace Ensi\LaravelElasticQuery\Aggregating\Metrics;

use Ensi\LaravelElasticQuery\Aggregating\Result;
use Ensi\LaravelElasticQuery\Contracts\Aggregation;
use Webmozart\Assert\Assert;

class CardinalityAggregation implements Aggregation
{
public function __construct(protected string $name, protected string $field)
{
Assert::stringNotEmpty(trim($name));
Assert::stringNotEmpty(trim($field));
}

public function name(): string
{
return $this->name;
}

public function parseResults(array $response): array
{
return [$this->name => Result::parseValue($response[$this->name]) ?? 0];
}

public function toDSL(): array
{
return [
$this->name => [
'cardinality' => [
'field' => $this->field,
],
],
];
}
}
8 changes: 8 additions & 0 deletions src/Concerns/ConstructsAggregations.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use Ensi\LaravelElasticQuery\Aggregating\Bucket\NestedAggregation;
use Ensi\LaravelElasticQuery\Aggregating\Bucket\TermsAggregation;
use Ensi\LaravelElasticQuery\Aggregating\CompositeAggregationBuilder;
use Ensi\LaravelElasticQuery\Aggregating\Metrics\CardinalityAggregation;
use Ensi\LaravelElasticQuery\Aggregating\Metrics\MinMaxAggregation;
use Ensi\LaravelElasticQuery\Aggregating\Metrics\ValueCountAggregation;
use Ensi\LaravelElasticQuery\Contracts\Aggregation;
Expand Down Expand Up @@ -56,6 +57,13 @@ public function count(string $name, string $field): static
return $this;
}

public function cardinality(string $name, string $field): static
{
$this->aggregations->add(new CardinalityAggregation($name, $this->absolutePath($field)));

return $this;
}

public function nested(string $path, Closure $callback): static
{
$name = $this->aggregations->generateUniqueName($this->name());
Expand Down
10 changes: 10 additions & 0 deletions tests/Functional/Aggregating/AggregationQueryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,16 @@ public function testComposite(): void
);
}

public function testCardinality(): void
{
$this->testing->cardinality('cardinality', 'active');

$results = $this->testing->get();

// true and false
$this->assertEquals(2, $results->get('cardinality'));
}

public function testCountAll(): void
{
$this->testing->count('product_count', 'product_id');
Expand Down

0 comments on commit dd459ea

Please sign in to comment.