Skip to content

Commit fc7a1db

Browse files
committed
New subfileds mapping type
- this type support multiple fields in one context
1 parent 55dea3a commit fc7a1db

File tree

3 files changed

+95
-1
lines changed

3 files changed

+95
-1
lines changed

src/Mapping/Settings.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,12 @@ public function addMappingFieldObject(\Spameri\ElasticQuery\Mapping\Settings\Map
7878
}
7979

8080

81+
public function addMappingSubField(\Spameri\ElasticQuery\Mapping\Settings\Mapping\SubFields $subFields): void
82+
{
83+
$this->mapping->addSubField($subFields);
84+
}
85+
86+
8187
public function addAnalyzer(\Spameri\ElasticQuery\Mapping\AnalyzerInterface $analyzer): void
8288
{
8389
$this->analysis->analyzer()->add($analyzer);

src/Mapping/Settings/Mapping.php

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,23 @@ public function addFieldObject(\Spameri\ElasticQuery\Mapping\Settings\Mapping\Fi
4343
}
4444

4545

46+
public function addSubField(\Spameri\ElasticQuery\Mapping\Settings\Mapping\SubFields $subFields): void
47+
{
48+
$this->fields->add($subFields);
49+
}
50+
51+
4652
public function toArray(): array
4753
{
4854
$fields = [];
4955
/** @var \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldInterface $field */
5056
foreach ($this->fields as $field) {
51-
$fields[$field->key()] = $field->toArray()[$field->key()];
57+
if ($field instanceof \Spameri\ElasticQuery\Mapping\Settings\Mapping\SubFields) {
58+
$fields[$field->key()] = $field->toArray();
59+
60+
} else {
61+
$fields[$field->key()] = $field->toArray()[$field->key()];
62+
}
5263
}
5364

5465
return [
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Spameri\ElasticQuery\Mapping\Settings\Mapping;
4+
5+
class SubFields
6+
implements \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldInterface
7+
{
8+
9+
/**
10+
* @var string
11+
*/
12+
private $name;
13+
14+
/**
15+
* @var string
16+
*/
17+
private $type;
18+
19+
/**
20+
* @var \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldCollection
21+
*/
22+
private $fields;
23+
24+
25+
public function __construct(
26+
string $name,
27+
string $type = \Spameri\Elastic\Model\ValidateMapping\AllowedValues::TYPE_KEYWORD,
28+
?\Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldCollection $fields = NULL
29+
)
30+
{
31+
$this->name = $name;
32+
if ($fields === NULL) {
33+
$fields = new \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldCollection();
34+
}
35+
36+
if ( ! \in_array($type, \Spameri\Elastic\Model\ValidateMapping\AllowedValues::TYPES, TRUE)) {
37+
throw new \Spameri\ElasticQuery\Exception\InvalidArgumentException(
38+
'Not allowed type see \Spameri\Elastic\Model\ValidateMapping\AllowedValues::TYPES'
39+
);
40+
}
41+
$this->type = $type;
42+
$this->fields = $fields;
43+
}
44+
45+
46+
public function key(): string
47+
{
48+
return $this->name;
49+
}
50+
51+
52+
public function getFields(): \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldCollection
53+
{
54+
return $this->fields;
55+
}
56+
57+
58+
public function addMappingField(\Spameri\ElasticQuery\Mapping\Settings\Mapping\Field $field): void
59+
{
60+
$this->fields->add($field);
61+
}
62+
63+
64+
public function toArray(): array
65+
{
66+
$array['fields'] = [];
67+
$array['type'] = $this->type;
68+
69+
/** @var \Spameri\ElasticQuery\Mapping\Settings\Mapping\Field $field */
70+
foreach ($this->fields as $field) {
71+
$array['fields'][$field->key()] = $field->toArray()[$field->key()];
72+
}
73+
74+
return $array;
75+
}
76+
77+
}

0 commit comments

Comments
 (0)