-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathElasticsearchComparisonFormatter.php
More file actions
109 lines (98 loc) · 4.25 KB
/
ElasticsearchComparisonFormatter.php
File metadata and controls
109 lines (98 loc) · 4.25 KB
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
98
99
100
101
102
103
104
105
106
107
108
109
<?php
namespace G4\DataMapper\Engine\Elasticsearch;
use G4\DataMapper\Common\ComparisonFormatterInterface;
use G4\DataMapper\Common\Selection\Operator;
use G4\DataMapper\Common\ValueInterface;
use G4\DataMapper\Engine\Elasticsearch\Operators\BetweenOperator;
use G4\DataMapper\Engine\Elasticsearch\Operators\EqualOperator;
use G4\DataMapper\Engine\Elasticsearch\Operators\GreaterThanOperator;
use G4\DataMapper\Engine\Elasticsearch\Operators\GreaterThanOrEqualOperator;
use G4\DataMapper\Engine\Elasticsearch\Operators\InOperator;
use G4\DataMapper\Engine\Elasticsearch\Operators\LessThanOperator;
use G4\DataMapper\Engine\Elasticsearch\Operators\LessThanOrEqualOperator;
use G4\DataMapper\Engine\Elasticsearch\Operators\LikeCIOperator;
use G4\DataMapper\Engine\Elasticsearch\Operators\TimeFromInMinutesOperator;
use G4\DataMapper\Engine\Elasticsearch\Operators\LikeOperator;
use G4\DataMapper\Engine\Elasticsearch\Operators\MissingOperator;
use G4\DataMapper\Engine\Elasticsearch\Operators\ExistsOperator;
class ElasticsearchComparisonFormatter implements ComparisonFormatterInterface
{
const GREATER_THAN = 'gt';
const GREATER_THAN_OR_EQUAL = 'gte';
const LESS_THAN = 'lt';
const LESS_THAN_OR_EQUAL = 'lte';
const MATCH = 'match';
const RANGE = 'range';
const TERMS = 'terms';
private ElasticsearchIdentity $identity;
public function __construct(ElasticsearchIdentity $identity)
{
$this->identity = $identity;
}
public function format($name, Operator $operator, ValueInterface $value)
{
//TODO:Vladan:This should be refactored.
if (preg_match("/^-/", $name)) {
$name = ltrim($name, '-');
}
switch ($operator->getSymbol()) {
case Operator::EQUAL:
$query = new EqualOperator($name, $value);
break;
case Operator::EQUAL_CI:
$query = $this->getOperatorBasedOnEsVersion('EqualCIOperator', $name, $value);
break;
case Operator::GRATER_THAN:
$query = new GreaterThanOperator($name, $value);
break;
case Operator::LESS_THAN:
$query = new LessThanOperator($name, $value);
break;
case Operator::GRATER_THAN_OR_EQUAL:
$query = new GreaterThanOrEqualOperator($name, $value);
break;
case Operator::LESS_THAN_OR_EQUAL:
$query = new LessThanOrEqualOperator($name, $value);
break;
case Operator::IN:
$query = new InOperator($name, $value);
break;
case Operator::BETWEEN:
$query = new BetweenOperator($name, $value);
break;
case Operator::TIME_FROM_IN_MINUTES:
$query = new TimeFromInMinutesOperator($name, $value);
break;
case Operator::LIKE:
$query = new LikeOperator($name, $value);
break;
case Operator::LIKE_CI:
$query = $this->getOperatorBasedOnEsVersion('LikeCIOperator', $name, $value);
break;
case Operator::MULTI_LIKE_CI:
$query = $this->getOperatorBasedOnEsVersion('MultiLikeCIOperator', $name, $value);
break;
case Operator::MISSING:
$query = new MissingOperator($name, $value);
break;
case Operator::EXISTS:
$query = new ExistsOperator($name, $value);
break;
case Operator::QUERY_STRING:
$query = $this->getOperatorBasedOnEsVersion('QueryStringOperator', $name, $value);
break;
case Operator::CONSISTENT_RANDOM_KEY:
$query = $this->getOperatorBasedOnEsVersion('ConsistentRandomKey', $name, $value);
break;
}
return $query->format();
}
private function getOperatorBasedOnEsVersion($operatorName, $name, $value)
{
$classPath = ElasticsearchVersionFactory::getVersionedClassPath(
"Operators\\$operatorName",
$this->identity->getVersion()
);
return new $classPath($name, $value);
}
}