Skip to content

Commit 993ee87

Browse files
authored
Merge pull request #20 from ensi-platform/task-107572
Task 107572
2 parents 461cfa2 + e5303fe commit 993ee87

16 files changed

+341
-108
lines changed

src/Concerns/DecoratesBoolQuery.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Closure;
66
use Ensi\LaravelElasticQuery\Contracts\MatchOptions;
77
use Ensi\LaravelElasticQuery\Contracts\MultiMatchOptions;
8+
use Ensi\LaravelElasticQuery\Contracts\WildcardOptions;
89
use Ensi\LaravelElasticQuery\Filtering\BoolQueryBuilder;
910
use Illuminate\Contracts\Support\Arrayable;
1011
use Illuminate\Support\Traits\ForwardsCalls;
@@ -84,4 +85,11 @@ public function whereMultiMatch(array $fields, string $query, string|MultiMatchO
8485

8586
return $this;
8687
}
88+
89+
public function whereWildcard(string $field, string $query, ?WildcardOptions $options = null): static
90+
{
91+
$this->forwardCallTo($this->boolQuery(), __FUNCTION__, func_get_args());
92+
93+
return $this;
94+
}
8795
}

src/Contracts/WildcardOptions.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
namespace Ensi\LaravelElasticQuery\Contracts;
4+
5+
class WildcardOptions
6+
{
7+
public function __construct(private array $options = [])
8+
{
9+
}
10+
11+
public static function make(
12+
?float $boost = null,
13+
?bool $caseInsensitive = null,
14+
?string $rewrite = null,
15+
): static {
16+
$options = [];
17+
if (!is_null($boost)) {
18+
$options['boost'] = $boost;
19+
}
20+
if (!is_null($caseInsensitive)) {
21+
$options['case_insensitive'] = $caseInsensitive;
22+
}
23+
if (!is_null($rewrite)) {
24+
$options['rewrite'] = $rewrite;
25+
}
26+
27+
return new static($options);
28+
}
29+
30+
public function toArray(): array
31+
{
32+
return $this->options;
33+
}
34+
}

src/Filtering/BoolQueryBuilder.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@
88
use Ensi\LaravelElasticQuery\Contracts\Criteria;
99
use Ensi\LaravelElasticQuery\Contracts\MatchOptions;
1010
use Ensi\LaravelElasticQuery\Contracts\MultiMatchOptions;
11+
use Ensi\LaravelElasticQuery\Contracts\WildcardOptions;
1112
use Ensi\LaravelElasticQuery\Filtering\Criterias\Exists;
1213
use Ensi\LaravelElasticQuery\Filtering\Criterias\MultiMatch;
1314
use Ensi\LaravelElasticQuery\Filtering\Criterias\Nested;
1415
use Ensi\LaravelElasticQuery\Filtering\Criterias\OneMatch;
1516
use Ensi\LaravelElasticQuery\Filtering\Criterias\RangeBound;
1617
use Ensi\LaravelElasticQuery\Filtering\Criterias\Term;
1718
use Ensi\LaravelElasticQuery\Filtering\Criterias\Terms;
19+
use Ensi\LaravelElasticQuery\Filtering\Criterias\Wildcard;
1820
use Illuminate\Contracts\Support\Arrayable;
1921
use stdClass;
2022

@@ -165,6 +167,13 @@ public function whereMultiMatch(array $fields, string $query, string|MultiMatchO
165167
return $this;
166168
}
167169

170+
public function whereWildcard(string $field, string $query, ?WildcardOptions $options = null): static
171+
{
172+
$this->must->add(new Wildcard($this->absolutePath($field), $query, $options ?: new WildcardOptions()));
173+
174+
return $this;
175+
}
176+
168177
protected function addNestedCriteria(string $nested, Closure $filter, CriteriaCollection $target): static
169178
{
170179
$path = $this->absolutePath($nested);

src/Filtering/Criterias/Wildcard.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
namespace Ensi\LaravelElasticQuery\Filtering\Criterias;
4+
5+
use Ensi\LaravelElasticQuery\Contracts\Criteria;
6+
use Ensi\LaravelElasticQuery\Contracts\WildcardOptions;
7+
8+
class Wildcard implements Criteria
9+
{
10+
public function __construct(private string $field, private string $query, private WildcardOptions $options)
11+
{
12+
}
13+
14+
public function toDSL(): array
15+
{
16+
return ['wildcard' => [
17+
$this->field => array_merge($this->options->toArray(), [
18+
'value' => $this->query,
19+
]),
20+
]];
21+
}
22+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace Ensi\LaravelElasticQuery\Suggesting\Request\Concerns;
4+
5+
use Webmozart\Assert\Assert;
6+
7+
trait WithMaxEdits
8+
{
9+
protected ?int $maxEdits = null;
10+
11+
public function maxEdits(int $maxEdits): static
12+
{
13+
Assert::range($maxEdits, 1, 2);
14+
15+
$this->maxEdits = $maxEdits;
16+
17+
return $this;
18+
}
19+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
namespace Ensi\LaravelElasticQuery\Suggesting\Request\Concerns;
4+
5+
trait WithMaxInspections
6+
{
7+
protected ?int $maxInspections = null;
8+
9+
public function maxInspections(int $maxInspections): static
10+
{
11+
$this->maxInspections = $maxInspections;
12+
13+
return $this;
14+
}
15+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
namespace Ensi\LaravelElasticQuery\Suggesting\Request\Concerns;
4+
5+
trait WithMaxTermFreq
6+
{
7+
protected ?int $maxTermFreq = null;
8+
9+
public function maxTermFreq(int $maxTermFreq): static
10+
{
11+
$this->maxTermFreq = $maxTermFreq;
12+
13+
return $this;
14+
}
15+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
namespace Ensi\LaravelElasticQuery\Suggesting\Request\Concerns;
4+
5+
trait WithMinDocFreq
6+
{
7+
protected ?int $minDocFreq = null;
8+
9+
public function minDocFreq(int $minDocFreq): static
10+
{
11+
$this->minDocFreq = $minDocFreq;
12+
13+
return $this;
14+
}
15+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
namespace Ensi\LaravelElasticQuery\Suggesting\Request\Concerns;
4+
5+
trait WithMinWordLength
6+
{
7+
protected ?int $minWordLength = null;
8+
9+
public function minWordLength(int $minWordLength): static
10+
{
11+
$this->minWordLength = $minWordLength;
12+
13+
return $this;
14+
}
15+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
namespace Ensi\LaravelElasticQuery\Suggesting\Request\Concerns;
4+
5+
trait WithPrefixLength
6+
{
7+
protected ?int $prefixLength = null;
8+
9+
public function prefixLength(int $prefixLength): static
10+
{
11+
$this->prefixLength = $prefixLength;
12+
13+
return $this;
14+
}
15+
}

0 commit comments

Comments
 (0)