2016-01-07 19:16:37 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Pony.fm - A community for pony fan music.
|
|
|
|
* Copyright (C) 2016 Peter Deltchev
|
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Affero General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU Affero General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
use Illuminate\Database\Migrations\Migration;
|
|
|
|
|
|
|
|
class SetupElasticsearch extends Migration
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Run the migrations.
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
public function up()
|
|
|
|
{
|
2016-02-22 05:47:52 +01:00
|
|
|
// As of 2016-02-21, Elasticsearch is not used in tests.
|
|
|
|
// Letting this migration run will blow away all data in it.
|
|
|
|
if (App::environment() === 'testing') {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2016-01-07 19:16:37 +01:00
|
|
|
$elasticsearch = Elasticsearch::connection();
|
|
|
|
|
|
|
|
$elasticsearch->indices()->create([
|
|
|
|
'index' => 'ponyfm',
|
|
|
|
'body' => [
|
|
|
|
'mappings' => [
|
|
|
|
'track' => [
|
|
|
|
'_source' => ['enabled' => true],
|
|
|
|
'dynamic' => 'strict',
|
|
|
|
'properties' => [
|
2016-01-17 11:33:58 +01:00
|
|
|
'title' => ['type' => 'string', 'analyzer' => 'english'],
|
|
|
|
'artist' => ['type' => 'string'],
|
2016-01-16 05:10:20 +01:00
|
|
|
|
2016-01-07 19:16:37 +01:00
|
|
|
'published_at' => ['type' => 'date'],
|
2016-01-17 11:33:58 +01:00
|
|
|
'genre' => ['type' => 'string', 'analyzer' => 'english'],
|
2016-01-15 07:20:28 +01:00
|
|
|
'track_type' => ['type' => 'string', 'index' => 'not_analyzed'],
|
2016-01-07 19:16:37 +01:00
|
|
|
|
|
|
|
// This field is intended to be used as an array.
|
|
|
|
// Note that all Elasticsearch fields can technically be used as arrays.
|
|
|
|
// See: https://www.elastic.co/guide/en/elasticsearch/reference/current/array.html
|
2016-01-17 11:33:58 +01:00
|
|
|
'show_songs' => ['type' => 'string'],
|
2016-01-07 19:16:37 +01:00
|
|
|
]
|
|
|
|
],
|
|
|
|
|
|
|
|
'album' => [
|
|
|
|
'_source' => ['enabled' => true],
|
|
|
|
'dynamic' => 'strict',
|
|
|
|
'properties' => [
|
2016-01-17 11:33:58 +01:00
|
|
|
'title' => ['type' => 'string', 'analyzer' => 'english'],
|
|
|
|
'artist' => ['type' => 'string'],
|
2016-01-07 19:16:37 +01:00
|
|
|
|
|
|
|
// This field is intended to be used as an array.
|
|
|
|
// Note that all Elasticsearch fields can technically be used as arrays.
|
|
|
|
// See: https://www.elastic.co/guide/en/elasticsearch/reference/current/array.html
|
2016-01-17 11:33:58 +01:00
|
|
|
'tracks' => ['type' => 'string', 'analyzer' => 'english']
|
2016-01-07 19:16:37 +01:00
|
|
|
]
|
2016-01-16 05:10:20 +01:00
|
|
|
],
|
|
|
|
|
|
|
|
'playlist' => [
|
|
|
|
'_source' => ['enabled' => true],
|
|
|
|
'dynamic' => 'strict',
|
|
|
|
'properties' => [
|
2016-01-17 11:33:58 +01:00
|
|
|
'title' => ['type' => 'string', 'analyzer' => 'english'],
|
|
|
|
'curator' => ['type' => 'string'],
|
2016-01-16 05:10:20 +01:00
|
|
|
|
|
|
|
// This field is intended to be used as an array.
|
|
|
|
// Note that all Elasticsearch fields can technically be used as arrays.
|
|
|
|
// See: https://www.elastic.co/guide/en/elasticsearch/reference/current/array.html
|
2016-01-17 11:33:58 +01:00
|
|
|
'tracks' => ['type' => 'string', 'analyzer' => 'english']
|
2016-01-16 05:10:20 +01:00
|
|
|
]
|
|
|
|
],
|
|
|
|
|
|
|
|
'user' => [
|
|
|
|
'_source' => ['enabled' => true],
|
|
|
|
'dynamic' => 'strict',
|
|
|
|
'properties' => [
|
|
|
|
'username' => ['type' => 'string', 'index' => 'not_analyzed'],
|
2016-01-17 11:33:58 +01:00
|
|
|
'display_name' => ['type' => 'string'],
|
2016-01-16 05:10:20 +01:00
|
|
|
|
|
|
|
// This field is intended to be used as an array.
|
|
|
|
// Note that all Elasticsearch fields can technically be used as arrays.
|
|
|
|
// See: https://www.elastic.co/guide/en/elasticsearch/reference/current/array.html
|
2016-01-17 11:33:58 +01:00
|
|
|
'tracks' => ['type' => 'string', 'analyzer' => 'english']
|
2016-01-16 05:10:20 +01:00
|
|
|
]
|
|
|
|
],
|
2016-01-07 19:16:37 +01:00
|
|
|
]
|
|
|
|
]
|
|
|
|
]);
|
|
|
|
|
|
|
|
Artisan::call('rebuild:search');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Reverse the migrations.
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
public function down()
|
|
|
|
{
|
2016-02-22 05:47:52 +01:00
|
|
|
// As of 2016-02-21, Elasticsearch is not used in tests.
|
|
|
|
// Letting this migration run will blow away all data in it.
|
|
|
|
if (App::environment() === 'testing') {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2016-01-07 19:16:37 +01:00
|
|
|
$elasticsearch = Elasticsearch::connection();
|
|
|
|
|
|
|
|
$elasticsearch->indices()->delete(['index' => 'ponyfm']);
|
|
|
|
}
|
|
|
|
}
|