Skip to content

Commit

Permalink
Added migrations as builder.
Browse files Browse the repository at this point in the history
  • Loading branch information
Christopher Lorke committed Sep 22, 2018
1 parent 2da748e commit 142350d
Show file tree
Hide file tree
Showing 27 changed files with 921 additions and 409 deletions.
79 changes: 0 additions & 79 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,85 +51,6 @@ The package is registered through the package discovery of laravel and Composer.
| pass | ELASTICSEARCH_PASS | STRING | Password |
| migration.filePath | --- | STRING | File path for migration scripts |

### migrations.php
| Key | Value | Description |
|:-------------:|:-------------:|:-----:|
| *.index | STRING | Index |
| *.type | STRING (create, update or delete) | Type of migration |
| *.mappings | ARRAY (create = required, optional) | Example: mappings |
| *.settings | ARRAY (optional) | Example: settings |
| *.closeIndex | BOOL (default = false) | Close index for settings update |
| *.alias | ARRAY | add or remove alias, remove indices |
| *.reindex | ARRAY | reindex index |
| *.reindex.index | ARRAY | reindex: index destination |
| *.reindex.refresh | ARRAY | reindex: index refresh before reindex |
| *.reindex.global | ARRAY | reindex global configs: conflicts, size, script |
| *.reindex.source | ARRAY | reindex source configs: type, query, sort, _source, size, remote |
| *.reindex.dest | ARRAY | reindex dest configs: version_type, op_type, routing, pipeline |
| *.deleteByQuery | ARRAY | deleteByQuery |
| *.updateByQuery | ARRAY | updateByQuery |

#### Example: mappings
```
'mappings' => [
'phpunit' => [
'dynamic' => 'strict',
'properties' => [
'title' => [
'type' => 'text'
]
]
]
]
```

#### Example: settings
```
'settings' => [
'index' => [
'refresh_interval' => "60s"
]
]
```

#### Example: alias
```
'alias' => [
'add' => [ALIAS, ...],
'remove' => [ALIAS, ...],
'removeIndex' => [INDEX, ...]
]
```

#### Example: reindex
```
'reindex' => [
'index' => STRING,
'refresh' => BOOL
]
```

#### Example: deleteByQuery
```
'deleteByQuery' => [
'type' => STRING,
'query' => ARRAY,
'conflicts' => proceed,
...
]
```

#### Example: updateByQuery
```
'updateByQuery' => [
'type' => STRING,
'query' => ARRAY,
'conflicts' => proceed,
'script' => ARRAY,
...
]
```

## Usage

### Start migration
Expand Down
152 changes: 152 additions & 0 deletions src/Business/Factory/MigrationBuilder.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
<?php
namespace Triadev\EsMigration\Business\Factory;

use Triadev\EsMigration\Models\Migrations\Alias;
use Triadev\EsMigration\Models\Migrations\CreateIndex;
use Triadev\EsMigration\Models\Migrations\DeleteByQuery;
use Triadev\EsMigration\Models\Migrations\DeleteIndex;
use Triadev\EsMigration\Models\Migrations\Reindex;
use Triadev\EsMigration\Models\Migrations\UpdateByQuery;
use Triadev\EsMigration\Models\Migrations\UpdateIndex;

class MigrationBuilder
{
/**
* Migration: createIndex
*
* @param string $index
* @param array $mappings
* @param array|null $settings
* @return CreateIndex
*/
public static function createIndex(
string $index,
array $mappings,
?array $settings = null
) : CreateIndex {
return (new CreateIndex($index, $mappings))->setSettings($settings);
}

/**
* Migration: updateIndex
*
* @param string $index
* @param array|null $mappings
* @param array|null $settings
* @param bool $closeIndex
* @return UpdateIndex
*/
public static function updateIndex(
string $index,
?array $mappings = null,
?array $settings = null,
bool $closeIndex = false
) : UpdateIndex {
return (new UpdateIndex($index))
->setMappings($mappings)
->setSettings($settings)
->setCloseIndex($closeIndex);
}

/**
* Migration: deleteIndex
*
* @param string $index
* @return DeleteIndex
*/
public static function deleteIndex(
string $index
) : DeleteIndex {
return (new DeleteIndex($index));
}

/**
* Migration: alias
*
* @param string $index
* @param array $add
* @param array $remove
* @param array $removeIndices
* @return Alias
*/
public static function alias(
string $index,
array $add = [],
array $remove = [],
array $removeIndices = []
) : Alias {
return (new Alias($index))
->setAdd($add)
->setRemove($remove)
->setRemoveIndices($removeIndices);
}

/**
* Migration: deleteByQuery
*
* @param string $index
* @param array $query
* @param null|string $type
* @param array $options
* @return DeleteByQuery
*/
public static function deleteByQuery(
string $index,
array $query,
?string $type = null,
array $options = []
) : DeleteByQuery {
return (new DeleteByQuery($index, $query))
->setType($type)
->setOptions($options);
}

/**
* Migration: updateByQuery
*
* @param string $index
* @param array $query
* @param null|string $type
* @param null|array $script
* @param array $options
* @return UpdateByQuery
*/
public static function updateByQuery(
string $index,
array $query,
?string $type = null,
?array $script = null,
array $options = []
) : UpdateByQuery {
return (new UpdateByQuery($index, $query))
->setType($type)
->setScript($script)
->setOptions($options);
}

/**
* Migration: reindex
*
* @param string $index
* @param string $destIndex
* @param bool $refreshSourceIndex
* @param array $global
* @param array $source
* @param array $dest
* @return Reindex
*/
public static function reindex(
string $index,
string $destIndex,
bool $refreshSourceIndex = false,
array $global = [],
array $source = [],
array $dest = []
) : Reindex {
return (new Reindex($index, $destIndex))
->setRefreshSourceIndex($refreshSourceIndex)
->setGlobal($global)
->setSource($source)
->setDest($dest);
}
}
47 changes: 20 additions & 27 deletions src/Business/Migration/Alias.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,46 +2,39 @@
namespace Triadev\EsMigration\Business\Migration;

use Elasticsearch\Client;
use Triadev\EsMigration\Models\Migration;

class Alias
{
/**
* Migrate
*
* @param Client $esClient
* @param Migration $migration
* @param \Triadev\EsMigration\Models\Migrations\Alias $migration
*/
public function migrate(Client $esClient, Migration $migration)
public function migrate(Client $esClient, \Triadev\EsMigration\Models\Migrations\Alias $migration)
{
if ($migration->getAlias()) {
$alias = $migration->getAlias();

if (!empty($alias->getAdd())) {
foreach ($alias->getAdd() as $a) {
$esClient->indices()->putAlias([
'index' => $migration->getIndex(),
'name' => $a
]);
}
if (!empty($migration->getAdd())) {
foreach ($migration->getAdd() as $a) {
$esClient->indices()->putAlias([
'index' => $migration->getIndex(),
'name' => $a
]);
}
}

if (!empty($alias->getRemove())) {
foreach ($alias->getRemove() as $a) {
$esClient->indices()->deleteAlias([
'index' => $migration->getIndex(),
'name' => $a
]);
}
if (!empty($migration->getRemove())) {
foreach ($migration->getRemove() as $a) {
$esClient->indices()->deleteAlias([
'index' => $migration->getIndex(),
'name' => $a
]);
}
}

if (!empty($alias->getRemoveIndex())) {
foreach ($alias->getRemoveIndex() as $i) {
$esClient->indices()->delete([
'index' => $i
]);
}
}
if (!empty($migration->getRemoveIndices())) {
$esClient->indices()->delete([
'index' => implode(',', $migration->getRemoveIndices())
]);
}
}
}
27 changes: 12 additions & 15 deletions src/Business/Migration/CreateIndex.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,28 @@
namespace Triadev\EsMigration\Business\Migration;

use Elasticsearch\Client;
use Triadev\EsMigration\Models\Migration;

class CreateIndex
{
/**
* Migrate
*
* @param Client $esClient
* @param Migration $migration
* @param \Triadev\EsMigration\Models\Migrations\CreateIndex $migration
*/
public function migrate(Client $esClient, Migration $migration)
public function migrate(Client $esClient, \Triadev\EsMigration\Models\Migrations\CreateIndex $migration)
{
if ($migration->getType() == 'create') {
$body = [
'mappings' => $migration->getMappings()
];
$body = [
'mappings' => $migration->getMappings()
];

if ($migration->getSettings()) {
$body['settings'] = $migration->getSettings();
}

$esClient->indices()->create([
'index' => $migration->getIndex(),
'body' => $body
]);
if ($migration->getSettings()) {
$body['settings'] = $migration->getSettings();
}

$esClient->indices()->create([
'index' => $migration->getIndex(),
'body' => $body
]);
}
}
Loading

0 comments on commit 142350d

Please sign in to comment.