Faire un lien entre deux index


(Abdelhamid Cherif) #1

Bonjour,

J'ai un petit problème et je sais que Elasticsearch n'est pas vraiment adapté mais j'essaie quand même.
J'ai deux index :
L'un contient des infos de jobs : job_id, salaire et niveau_expérience
L'autre des stats sur ces jobs, prenons pour simplifier l'exemple du secteur d'activité : job_id et id_secteur

Le truc à savoir est que les statistiques sont récupérées grâce à des agrégations, elles ne sont pas prêtes directement dans la base.

Mon but est, à partir d'un secteur d'activité, retrouver les jobs_id.
Je ne peux pas le faire directement car mes statistiques sont calculées grâce à des agrégations avant de les récupérer.

A part calculer toutes les statistiques puis récupérer celles qui contiennent le secteur demandé pour ensuite récupérer les jobs_id, je n'ai pas trouvé de moyen plus simple et surtout qui ne nécessite pas un calcul aussi gros.

Merci de votre aide


(Julien) #2

Bonjour,

Si l'index "secteur" a les champs "job_id" et "id_secteur" et d'autre champs de statistique que le but est de retourner cette liste il suffirait de lister les valeurs de cet index et les 2 champs en question ?

Je ne peux pas le faire directement car mes statistiques sont calculées grâce à des agrégations avant de les récupérer.

Je ne comprends pas bien ou est le probleme, est-ce que tu peux attacher un gist avec le mapping et des donnees des 2 indices et expliquer qu'est-ce que tu essais d'avoir comme retours depuis ces donnees?


(Abdelhamid Cherif) #3

Merci de votre réponse.
Les mapping se trouvent ici

Comme je l'avais dit, les secteurs d'activités de peuvent pas sortir sans faire d'aggregations. En effet, nous insérons chaque jour les stats calculées de la journée et donc pour avoir le stats globales, on aggrège sur tous les jours...

mon input serait : un id de secteur d'activité
mon output : les jobs (avec les infos comme définis dans le mapping job) qui correspondent à ces secteurs d'activités

Merci


(Abdelhamid Cherif) #4

J'ai enlevé les analyzers des mapping sur gist pour simplifier


(Abdelhamid Cherif) #5

J'ai essayé de faire des stats inversées :
Au lieu de calculer pour un job le top des secteurs d'activités, je calcule pour un secteur d'activités le top des jobs qui lui correspondent. Le problème est qu'une fois ça calculé, j'ai besoin des informations contenues dans l'autre index (jobs) et donc je voudrais bien être en mesure, dans la même requête, de faire l'aggregation sur l'index des secteurs d'activité puis d'utiliser son output (les jobs_id) pour sortir de l'index des jobs les autres infos.
Donc faire une agrégation puis utiliser son output pour faire un filtre sur un autre index


(Julien) #6

Ok je n'ai pas de données d'exemple mais je pense comprendre et il me semble que le problème est qu'elasticsearch n'ai pas un RDBM, le problème vient du modelling des données elles-même : il n'y a pas de concept de clef externe ou une requête SQL avec "WHERE" et "JOIN" entre 2 indices pour elasticsearch.
Les fonctionnalités les plus proches de ca serait join datatype (Parent/Child en v5)....

Je pense que le mieux serait de denormaliser les données, un seul index contenant tout les champs/propriétés des 2 indices actuels


(Abdelhamid Cherif) #7

Je me doutais bien que le modèle n'était pas adapté et que ES n'avait pas comme but une liaison entre données... C'est pour ça que je disais au début de mon premier post que ES n'était pas vraiment adapté au problème... J'en ai maintenant la confirmation
Un grand merci pour ta réponse :smile:


(system) #8

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.