24/02/2018 - ELASTICSEARCH, SYMFONY
Elasticsearch mevcut indexin yenilenmesi sırasında sistemde kesinti olmaması için bize Index Alias özelliğini sunar. Uygulamamız index kullanırken, aslında gerçek index yerine alias indexi kullanıyor. Bu bildiğimiz symlink özelliğidir. İndexi yenilediğimiz zaman, index alias yeni indexe bağlanıyor ve eski index siliniyor. Bu sayede index alias uygulamamıza her zaman veri sağlıyor. Örneğimiz ayrıca FOSElasticaBundle kullanıyor.
# List all indexes
$ curl 127.0.0.1:9200/_cat/indices?v
# Recreate new index with new set of data
$ bin/console fos:elastica:populate --index=country
Aşağıdaki konfigürasyon ayarlarında index alias özelliğini kullanabilmek için use_alias: true
girdisini kullanıyoruz. Çalıştığımız ortama göre index alias ismi değişecek yani, country_dev
(app_dev.php/DEV), country_test
(app_test.php/TEST), country
(app.php/PROD) vs olacak. Diğer konfigürasyon ayarlarını şu an için önemsemeyin. Biz örneğimizde DEV ortamını kullanıyoruz bu nedenle index alias ismi country_dev
olacak.
fos_elastica:
clients:
default: { host: 127.0.0.1, port: 9200 }
indexes:
country:
client: default
use_alias: true
index_name: country_%kernel.environment%
types:
country:
properties:
id:
type: integer
name:
type: text
abbreviation:
type: text
persistence:
driver: orm
model: AppBundle\Entity\Country
finder: ~
provider: ~
listener: ~
Sistemde index yaratma işlemini daha yapmadık bu nedenle terminalde aşağıdaki sonucu alacağız.
$ curl 127.0.0.1:9200/_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
$ bin/console fos:elastica:populate --index=country # "country" is the index name from mapping above
Resetting country
12/12 [============================] 100%
Populating country/country
Refreshing country
Aşağıda'da gördüğümüz gibi gerçek index country_dev_2018-02-24-093619
olarak isimlendirilmiş durumdadır ve bizim country_dev
index alias tarafından kullanılacaktır.
$ curl 127.0.0.1:9200/_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open country_dev_2018-02-24-093619 pLjMusDPQcGjC0EP56AxNQ 5 1 12 0 18.7kb 18.7kb
$ bin/console fos:elastica:populate --index=country # "country" is the index name from mapping above
Resetting country
12/12 [============================] 100%
Populating country/country
Refreshing country
Aşağıda'da gördüğümüz gibi eski country_dev_2018-02-24-093619
index, yeni country_dev_2018-02-24-101126
ile değiştirilmiş durumda.
$ curl 127.0.0.1:9200/_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open country_dev_2018-02-24-101126 -HJQb-yjRhCZqpIR6tGL4w 5 1 12 0 4.6kb 4.6kb