Skip to content

Commit b0f6791

Browse files
committed
Dokumentace
1 parent 2968728 commit b0f6791

9 files changed

Lines changed: 270 additions & 135 deletions

File tree

doc/00_quick_start.md

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,15 @@ In your configuration neon file you need to add these lines to `extension:` sect
2020
```yaml
2121
extensions:
2222
spameriElasticSearch: \Spameri\Elastic\DI\SpameriElasticSearchExtension
23-
console: Kdyby\Console\DI\ConsoleExtension
24-
monolog: Kdyby\Monolog\DI\MonologExtension
2523
```
2624

25+
Optionaly you need some Symfony Console implementation ie:
26+
27+
`````yaml
28+
extensions:
29+
console: Kdyby\Console\DI\ConsoleExtension
30+
`````
31+
2732
### II. Configure
2833

2934
Now you need to tell library where is ElasticSearch running. Default values are **localhost**
@@ -38,29 +43,21 @@ spameriElasticSearch:
3843

3944
### III. Configure Entity
4045

41-
Next step is to configure your first entity. This entity is for e-shop product.
46+
Next step is to configure your first entity. In this example, entity is for e-shop product.
47+
48+
In neon configuration you need just index name. In this example it is just under parameters.elasticsSearch key, but can be anywhere.
4249

4350
```yaml
44-
1.| spameriElasticSearch:
45-
2.| entities:
46-
3.| SimpleProduct:
47-
4.| index: spameri_simple_product
48-
5.| dynamic: strict
49-
6.| config: @simpleProductConfig
50-
7.| properties:
51+
parameters:
52+
elasticSearch:
53+
SimpleProductIndex: spameri_simple_product
5154
```
52-
- First line is extensionName
53-
- Second line is entities config array
54-
- Third line is EntityName
55-
- Fourth line is index name for this entity
56-
- Fifth line is for specifying whether index should accept new not specified fields
57-
- Sixth line is reference to where is object with entity configuration
58-
- Seventh line is where you can configure your entity within this neon
5955

6056
---
6157

6258
## 3. Create entity class
6359

60+
Mainly you need entity class, which implements \Spameri\Elastic\Entity\ElasticEntityInterface interface.
6461
```php
6562
<?php declare(strict_types = 1);
6663

@@ -86,6 +83,8 @@ class SimpleProduct implements \Spameri\Elastic\Entity\ElasticEntityInterface
8683
}
8784
```
8885

86+
And then implement two methods. Method id is quite clear :) and entityVariables method returns all the properties you want inserted to Elastic.
87+
8988
```php
9089
public function id(): \Spameri\Elastic\Entity\Property\ElasticIdInterface
9190
{
@@ -99,6 +98,8 @@ public function entityVariables(): array
9998
}
10099
```
101100

101+
To build entity from Elasticsearch and not use black magic🪄 you have to explicitly make factory class for that entity. And from hit object which represents result from Elasticsearch you have to extract all parameters. No magic, typed 🎖️
102+
102103
### Factory
103104
````php
104105
class SimpleProductFactory implements \Spameri\Elastic\Factory\EntityFactoryInterface
@@ -123,6 +124,8 @@ class SimpleProductFactory implements \Spameri\Elastic\Factory\EntityFactoryInte
123124
}
124125
````
125126

127+
In collection factory you need to specify our entity.
128+
126129
### CollectionFactory
127130
````php
128131
class SimpleProductCollectionFactory implements \Spameri\Elastic\Factory\CollectionFactoryInterface
@@ -140,6 +143,8 @@ class SimpleProductCollectionFactory implements \Spameri\Elastic\Factory\Collect
140143
}
141144
````
142145

146+
---
147+
143148
## 4. Index Configuring
144149
````php
145150
class SimpleProductConfig implements \Spameri\Elastic\Settings\IndexConfigInterface

doc/01_intro.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,19 @@ Use composer `composer require spameri/elastic`
99
### 1. Config ElasticSearch
1010

1111
In your config neon, enable extensions. Kdyby/Console is there because we need it to do some command line commands.
12-
Monolog is required by elasticsearch/elasticsearch and we can use existing extension in Kdyby/Monolog.
1312

14-
```neon
13+
```yaml
1514
extensions:
1615
spameriElasticSearch: \Spameri\Elastic\DI\SpameriElasticSearchExtension
17-
console: Kdyby\Console\DI\ConsoleExtension
18-
monolog: Kdyby\Monolog\DI\MonologExtension
1916
```
2017

18+
Optionaly you need some Symfony Console implementation ie:
19+
20+
`````yaml
21+
extensions:
22+
console: Kdyby\Console\DI\ConsoleExtension
23+
`````
24+
2125
Then configure where is your ElasticSearch.
2226
```neon
2327
spameriElasticSearch:
@@ -52,8 +56,6 @@ what methods and arrays are supported.
5256

5357
### 2. First entity
5458

55-
#### [Neon file configuration](02_neon_configuration.md)
56-
5759
#### [Create entity class](03_entity_class.md)
5860

5961
#### [Create entity service](12_entity_service.md)

doc/02_configuration.md

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
## Mapping class
2+
```php
3+
<?php declare(strict_types = 1);
4+
5+
namespace SpameriTests\Elastic\Data\Model;
6+
7+
class VideoMapping implements \Spameri\Elastic\Settings\IndexConfigInterface
8+
{
9+
10+
private string $index;
11+
12+
13+
public function __construct(
14+
string $index
15+
)
16+
{
17+
$this->index = $index;
18+
}
19+
20+
21+
public function provide(): \Spameri\ElasticQuery\Mapping\Settings
22+
{
23+
$settings = new \Spameri\ElasticQuery\Mapping\Settings($this->index);
24+
25+
$nameFields = new \Spameri\ElasticQuery\Mapping\Settings\Mapping\SubFields(
26+
'name',
27+
\Spameri\Elastic\Model\ValidateMapping\AllowedValues::TYPE_TEXT
28+
);
29+
$nameFields->addMappingField(
30+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\Field(
31+
'edgeNgram',
32+
\Spameri\Elastic\Model\ValidateMapping\AllowedValues::TYPE_TEXT
33+
)
34+
);
35+
$nameFields->addMappingField(
36+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\Field(
37+
'wordSplit',
38+
\Spameri\Elastic\Model\ValidateMapping\AllowedValues::TYPE_TEXT
39+
)
40+
);
41+
$nameFields->addMappingField(
42+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\Field(
43+
'wordJoin',
44+
\Spameri\Elastic\Model\ValidateMapping\AllowedValues::TYPE_TEXT
45+
)
46+
);
47+
$settings->addMappingSubField($nameFields);
48+
49+
$story = new \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldObject(
50+
'story',
51+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldCollection(
52+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\Field(
53+
'description',
54+
\Spameri\Elastic\Model\ValidateMapping\AllowedValues::TYPE_TEXT
55+
),
56+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\Field(
57+
'tagLine',
58+
\Spameri\Elastic\Model\ValidateMapping\AllowedValues::TYPE_KEYWORD
59+
)
60+
)
61+
);
62+
$settings->addMappingFieldObject($story);
63+
64+
$season = new \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldObject(
65+
'season',
66+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldCollection(
67+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\Field(
68+
'number',
69+
\Spameri\Elastic\Model\ValidateMapping\AllowedValues::TYPE_KEYWORD
70+
),
71+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldObject(
72+
'episodes',
73+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldCollection(
74+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\Field(
75+
'id',
76+
\Spameri\Elastic\Model\ValidateMapping\AllowedValues::TYPE_KEYWORD
77+
),
78+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\Field(
79+
'number',
80+
\Spameri\Elastic\Model\ValidateMapping\AllowedValues::TYPE_KEYWORD
81+
),
82+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\Field(
83+
'name',
84+
\Spameri\Elastic\Model\ValidateMapping\AllowedValues::TYPE_TEXT
85+
),
86+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\Field(
87+
'description',
88+
\Spameri\Elastic\Model\ValidateMapping\AllowedValues::TYPE_TEXT
89+
)
90+
)
91+
)
92+
)
93+
);
94+
$settings->addMappingFieldObject($season);
95+
96+
$identification = new \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldObject(
97+
'identification',
98+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldCollection(
99+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\Field(
100+
'imdb',
101+
\Spameri\ElasticQuery\Mapping\AllowedValues::TYPE_KEYWORD
102+
)
103+
)
104+
);
105+
$settings->addMappingFieldObject($identification);
106+
107+
$settings->addMappingField(
108+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\Field(
109+
'year',
110+
\Spameri\Elastic\Model\ValidateMapping\AllowedValues::TYPE_LONG
111+
)
112+
);
113+
114+
$settings->addMappingFieldObject(
115+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldObject(
116+
'technical',
117+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldCollection()
118+
)
119+
);
120+
121+
$settings->addMappingFieldObject(
122+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldObject(
123+
'details',
124+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldCollection()
125+
)
126+
);
127+
128+
$settings->addMappingFieldObject(
129+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldObject(
130+
'highLights',
131+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldCollection()
132+
)
133+
);
134+
135+
$settings->addMappingFieldObject(
136+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldObject(
137+
'connections',
138+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldCollection()
139+
)
140+
);
141+
142+
$settings->addMappingFieldObject(
143+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldObject(
144+
'people',
145+
new \Spameri\ElasticQuery\Mapping\Settings\Mapping\FieldCollection()
146+
)
147+
);
148+
149+
return $settings;
150+
}
151+
152+
}
153+
154+
```
155+
156+
#### Tips
157+
- Do not use field named `id` in mapping. Use `databaseId` or `externalId` depending from your data originates.
158+
- Do not use same field name in entity structure.

doc/02_neon_configuration.md

Lines changed: 0 additions & 78 deletions
This file was deleted.

0 commit comments

Comments
 (0)