Ajouter des objets à un index existant

31 views
Skip to first unread message

Jérome

unread,
May 14, 2012, 11:40:17 AM5/14/12
to Elasticsearch FR
Surtout par curiosité mais j'aimerais bien de l'aide quand même :

J'ai quelque chose dans ce style :

{
objet : {
tag : valeur,
tag2 : valeur,
},
objet2 : { tag : valeur }
}


Je souhaite pouvoir ajouter des objet ou des tags dans ces objets.
J'ai pensé à utiliser la fonction reindex mais j'ai pas réussi, je me
suis donc rabattu sur update.

J'ai établi un script mais quoique je fasse il considère comme : "Bad
Request"

Voici le script en question :

if(ctx._source.$objet){ #Si l'objet existe
if(ctx._source.$objet\[\"$tag\"] == null){ #Si le tag dans
l'objet existe pas
ctx._source.$objet\[\"$tag\"] = \"$value\" #Le créer et lui
attribuer une valeur
}
else {
ctx._source.$objet\[\"$tag\"] += \" $value\" #Sinon lui rajouter
une valeur
}
}
else {
ctx._source.$objet\[\"$tag\"] = \"$value\" #Sinon créer l'objet
et le tag et ajouter la valeur
}




Voilà, j'ai fait pas mal de tests mais ça n'à jamais marché, est-ce
possible au moins ?
Si cela n'est pas possible ya t-il un moyen quelconque d'ajouter des
objets a un index existant ?

David Pilato

unread,
May 14, 2012, 2:54:59 PM5/14/12
to elastics...@googlegroups.com
Je ne comprends pas.
Pourquoi ne mets tu pas ton document à jour de ton coté ?
Puis tu envoies cette nouvelle version à Elasticsearch !

Pourquoi essayes tu de faire faire ça par un script dans Elasticsearch ?

David
> --
> ---
> Vous pouvez également poster et consulter les réponses en anglais sur le groupe Elasticsearch https://groups.google.com/group/elasticsearch
>
> Si vous avez également posté votre question sur la mailing list elasti...@googlegroups.com, merci d'indiquer ici le lien vers cette discussion pour faciliter le suivi.
>
> Twitter : @ElasticsearchFR https://twitter.com/#!/ElasticsearchFR
> Site web (English) : http://www.elasticsearch.org/

Jérome

unread,
May 15, 2012, 4:47:02 AM5/15/12
to Elasticsearch FR
J'y avais pas pensé mais ça ne change pas le problème. Je ne veux pas
updater le document mais les données présentes dans ES et ce à partir
du fichier initial, je veux me servir de update pour indexer des
parties du fichier qui peuvent être inexistantes, présentes sous un
autre nom dans un autre fichier.

Pas grave sinon,

Voilà, je ne comprend pas bien le module JSON en PERL, je n'ai pas vu
de fonction permettant de convertir un fichier ou un truc du genre
mais uniquement pour transformer des variables PERL.

Si j'ai une variable $objet contenant uniquement le nom de l'objet, et
sur le même schéma, une variable $tag et $value, convertir ces
variables en JSON est inutile puisque j'obtiendrais un truc du style :

{ objet }
{ tag }
{ value }

Comment faut-il utiliser le module JSON ? (en PERL ou n'importe quel
autre langage ça m'aiderait pour la compréhension) et surtout une fois
que j'aurais réussi à avoir une variable contenant mon JSON comment
puis-je l'intégrer dans les fonctions d'indexation ?

Jérome

unread,
May 21, 2012, 5:00:11 AM5/21/12
to Elasticsearch FR
Bon j'ai trouvé, je note ma réponse si un jour un jeune novice tel
que moi à un souci similaire :

En utilisant un hash

my %hashPersonne = (
personne => {
prenom => 'jerome',
age => '19',
etudie => 'bioinformatique',
},
);


my %hashFilm = (
film => {
titre => 'Virgin suicide',
realisateur => 'Sofia Coppola',
annee => '27-09-2000',
},
);


#Updater l'index
my @tab =('viande', 'boeuf');

my %hashIndex = (%hashPersonne, %hashFilm, @tab); #Concaténer tout
les index
$hashIndex{personne}{animal} = 'chat'; #Ajouter un couple clé/valeur
(animal => "chat")
$hashIndex{musique}{titre} = 'L aigle noir'; #Ajouter structure =>
{clé => "valeur"}
$hashIndex{musique}{artiste} = 'Barbara';
$hashIndex{musique}{annee_de_sortie} = '19';
$hashIndex{musique}{annee_de_sortie} .= '70'; #Concaténer avec le
résultat précédent



#Indexer dans ES :
my $result = $es->index(
index => 'toto',
type => 'tata',
id => '1',
data => \%hashIndex
);
Reply all
Reply to author
Forward
0 new messages