File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 55class CommonGrams implements \Spameri \ElasticQuery \Mapping \CustomAnalyzerInterface, \Spameri \ElasticQuery \Collection \Item
66{
77
8+ public const NAME = 'customCommonGrams ' ;
9+
810 /**
911 * @var \Spameri\ElasticQuery\Mapping\Settings\Analysis\FilterCollection
1012 */
@@ -42,7 +44,7 @@ public function key(): string
4244
4345 public function name (): string
4446 {
45- return ' customCommonGrams ' ;
47+ return self :: NAME ;
4648 }
4749
4850
Original file line number Diff line number Diff line change 55class EdgeNgram implements \Spameri \ElasticQuery \Mapping \CustomAnalyzerInterface, \Spameri \ElasticQuery \Collection \Item
66{
77
8+ public const NAME = 'customEdgeNgram ' ;
9+
810 /**
911 * @var \Spameri\ElasticQuery\Mapping\Settings\Analysis\FilterCollection
1012 */
@@ -49,7 +51,7 @@ public function key(): string
4951
5052 public function name (): string
5153 {
52- return ' customEdgeNgram ' ;
54+ return self :: NAME ;
5355 }
5456
5557
Original file line number Diff line number Diff line change 55class WordDelimiter implements \Spameri \ElasticQuery \Mapping \CustomAnalyzerInterface, \Spameri \ElasticQuery \Collection \Item
66{
77
8+ public const NAME = 'customWordDelimiter ' ;
9+
810 /**
911 * @var \Spameri\ElasticQuery\Mapping\Settings\Analysis\FilterCollection
1012 */
@@ -35,7 +37,7 @@ public function key(): string
3537
3638 public function name (): string
3739 {
38- return ' customWordDelimiter ' ;
40+ return self :: NAME ;
3941 }
4042
4143
Original file line number Diff line number Diff line change @@ -15,10 +15,13 @@ class Mapping implements \Spameri\ElasticQuery\Entity\ArrayInterface
1515 */
1616 private $ fields ;
1717
18+ private bool $ dynamic ;
19+
1820
1921 public function __construct (
2022 string $ indexName ,
21- ?\Spameri \ElasticQuery \Mapping \Settings \Mapping \FieldCollection $ fields = NULL
23+ ?\Spameri \ElasticQuery \Mapping \Settings \Mapping \FieldCollection $ fields = NULL ,
24+ bool $ dynamic = true
2225 )
2326 {
2427 $ this ->indexName = $ indexName ;
@@ -28,8 +31,13 @@ public function __construct(
2831 }
2932
3033 $ this ->fields = $ fields ;
34+ $ this ->dynamic = $ dynamic ;
3135 }
3236
37+ public function enableStrictMapping (): void
38+ {
39+ $ this ->dynamic = false ;
40+ }
3341
3442 public function getIndexName (): string
3543 {
@@ -103,6 +111,7 @@ public function toArray(): array
103111 return [
104112 'mappings ' => [
105113 'properties ' => $ fields ,
114+ 'dynamic ' => $ this ->dynamic ,
106115 ],
107116 ];
108117 }
Original file line number Diff line number Diff line change 1+ <?php declare (strict_types = 1 );
2+
3+ namespace Spameri \ElasticQuery \Mapping \Settings \Mapping ;
4+
5+ class FieldSeparator
6+ {
7+
8+ public const FIELD_SEPARATOR = '. ' ;
9+
10+ }
Original file line number Diff line number Diff line change @@ -69,26 +69,36 @@ public function getValue(
6969 string $ key
7070 )
7171 {
72- $ value = $ this ->source [$ key ] ?? NULL ;
73- if ($ value === NULL ) {
74- return NULL ;
75- }
72+ $ value = $ this ->getSubValue ($ key );
7673
77- if (\strpos ( $ key , ' . ' ) === FALSE ) {
74+ if ($ value !== NULL ) {
7875 return $ value ;
7976 }
8077
81- $ levels = \explode ('. ' , $ key );
78+ return $ this ->source [$ key ] ?? NULL ;
79+ }
80+
81+ /**
82+ * @phpstan-return mixed
83+ */
84+ public function getSubValue ($ key )
85+ {
86+ if (\str_contains ($ key , \Spameri \ElasticQuery \Mapping \Settings \Mapping \FieldSeparator::FIELD_SEPARATOR ) === TRUE ) {
87+ $ levels = \explode (\Spameri \ElasticQuery \Mapping \Settings \Mapping \FieldSeparator::FIELD_SEPARATOR , $ key );
88+
89+ $ value = $ this ->source [$ levels [0 ]];
90+ unset($ levels [0 ]);
8291
83- foreach ($ levels as $ subKey ) {
84- $ value = $ value [$ subKey ] ?? NULL ;
92+ foreach ($ levels as $ subKey ) {
93+ $ value = $ value [$ subKey ] ?? NULL ;
8594
86- if ($ value === NULL ) {
87- return NULL ;
95+ if ($ value !== NULL ) {
96+ return $ value ;
97+ }
8898 }
8999 }
90100
91- return $ value ;
101+ return NULL ;
92102 }
93103
94104
You can’t perform that action at this time.
0 commit comments