J'ai besoin de renommer plusieurs index dans un cluster (leur nom doit être changé, je ne peux pas utiliser d' alias ).
J'ai vu qu'il n'y avait pas de moyens pris en charge pour le faire, le plus proche que j'ai trouvé est de renommer le répertoire de l'index , j'ai essayé cela dans un cluster.
Le groupe dispose de 3 machines A
, B
et C
et les tessons sont répliquées sur chacun d'eux. J'ARRÊTER ElasticSearch sur A
, renommé /var/lib/elasticsearch/security/nodes/0/indices/oldindexname
pour /var/lib/elasticsearch/security/nodes/0/indices/newindexname
et redémarré A
.
L'état du cluster était jaune et elasticsearch faisait de la magie pour restaurer un état correct. Après un certain temps, je me suis retrouvé avec
oldindexname
être disponible et entièrement répliqué (récupéré deB
etC
je suppose)newindexname
étant disponible (je peux le rechercher) mais le plugin head montre que ses fragments sont dans un état "Non attribué" et qu'ils sont grisés (non répliqués)
Pendant la récupération, security.log
le message suivant a été affiché:
[2015-02-20 11:02:33,461][INFO ][gateway.local.state.meta ] [A.example.com] dangled index directory name is [newindexname], state name is [oldindexname], renaming to directory name
Bien qu'il newindexname
soit consultable, il n'est certainement pas dans un état normal.
Je suis revenu à l'état précédent en supprimant newindexname
. Le cluster est revenu au vert sans aucune entrée «Non attribué».
Étant donné que, comment puis - je renommer oldindexname
à newindexname
un cluster?
Remarque: la solution ultime je pense est de défilement copie oldindex
dans newindex
et supprimer par la oldindex
suite. Cela va prendre du temps, donc s'il y a une solution plus directe, ce serait formidable.
_source: {enabled: false}
?_reindex
utilise_source
comme données de document d'origine.twitter
pournew_twitter
autant que je sache.Pour renommer votre index, vous pouvez utiliser le module Elasticsearch Snapshot.
Vous devez d'abord prendre un instantané de votre index. En le restaurant, vous pouvez renommer votre index.
rename_replacement: -Nouveau nom d'index dans lequel vous souhaitez sauvegarder vos données.
la source
_source
d'être activé dans l'index. J'ai renommé certains indices multi-TB de cette façon sans aucun problème.En tant que tel, il n'y a pas de méthode directe pour copier ou renommer l'index dans ES (j'ai fait une recherche approfondie pour mon propre projet)
Cependant, une option très simple consiste à utiliser un outil de migration populaire [Elastic-Exporter].
http://www.retailmenot.com/corp/eng/posts/2014/12/02/elasticsearch-cluster-migration/
[PS: ce n'est pas mon blog, je suis juste tombé dessus et je l'ai trouvé bon]
Vous pouvez ainsi copier l'index / le type, puis supprimer l'ancien.
la source
Si vous ne pouvez pas REINDEX, une solution de contournement consiste à utiliser des alias . De la documentation officielle :
Les API dans elasticsearch acceptent un nom d'index lorsqu'elles travaillent sur un index spécifique, et plusieurs index le cas échéant. L'API d'alias d'index permet d'aliaser un index avec un nom, toutes les API convertissant automatiquement le nom d'alias en nom d'index réel. Un alias peut également être mappé à plusieurs index, et lors de sa spécification, l'alias se développera automatiquement vers les index d'alias. Un alias peut également être associé à un filtre qui sera automatiquement appliqué lors de la recherche et du routage des valeurs. Un alias ne peut pas avoir le même nom qu'un index.
Sachez que cette solution ne fonctionne pas si vous utilisez la fonctionnalité More Like This. https://github.com/elastic/elasticsearch/issues/16560
la source
I need to rename several indexes in a cluster (their name must be changed I cannot use aliases).
Par @WoJalias
oblige à planifier à l'avance et à créer le nom d'index d'origineas an alias
dans un index réel. Ensuite, vous pouvez créer un nouveau nom d'alias et réutiliser l'ancien nom d'alias pour autre chose. Mais vous perdez l'accès à old_data si vous n'avez qu'un real_index, créez un alias dessus, supprimez l'ancien real_index. L'alias ne pointe plus vers rien.Une autre manière différente de renommer ou de modifier les mappages d'un index consiste à réindexer à l'aide de logstash. Voici un exemple de la configuration de logstash 2.1:
la source
Comme indiqué dans Elasticsearch Reference for snapshot module ,
la source
Juste au cas où quelqu'un en aurait encore besoin. La manière réussie, et non officielle, de renommer les index est:
Si vous obtenez cette erreur «le nom du répertoire d'index suspendu est», supprimez le dossier d'index dans tous les nœuds maîtres (pas les nœuds de données) et redémarrez l'un des nœuds de données.
la source