Array, Object ou Nested, lequel apporte de meilleures performance?


(Christophe Rosko) #1

Hello !

J'ai dans mon index un champ qui représente les pays dans lesquels nos vidéos peuvent être diffusées. Pour chaque pays la valeur peut être 0, 1 ou 2. Tous les pays ne sont pas inclus dans le champ. Par exemple : {"GB":1, "FR":2, "DE":0, "US":1}.

J'ai besoin de filtrer sur ces valeurs : par exemple, vérifier si "countries.GB" existe et est supérieur à 0. J'ai également besoin de trier sur la valeur de "countries.GB" .

Actuellement ce champ est de type Object dans mon index. J'ai cru comprendre que ce n'était pas forcément une bonne idée car cela crée de nombreux champs dans le mapping. Dans ce cas, est-il préférable de les stocker sous un format du type : [{"country":"GB","value":1},{"country":"FR","value":2},{"country":"DE","value":0},{"country":"US","value":1}] ?

Si oui, quel type est le plus approprié, Array, Object ou Nested ?

Merci pour votre aide :smile:


(David Pilato) #2

Je ferais sans doute :

"countries": {"GB":1, "FR":2, "DE":0, "US":1}

Avec le mapping par default...


(Christophe Rosko) #3

Merci @dadoonet pour ta réponse.
Qu'entends-tu par mapping par défaut ? Un type Object ?


(David Pilato) #4

Oui c'est ça. Pas de nested ou parent/child.


(Christophe Rosko) #5

Ok merci :smile:


(Camilo Sierra) #6

hello @Christophe_Rosko j'arrive un peut tard mais voici un article tres interesant publie dans le blog ES https://www.elastic.co/blog/managing-relations-inside-elasticsearch qui parle des object, nested ou parent child qui vas t'aider a mieux comprendre comment choisir une prochaine fois


(Christophe Rosko) #7

Merci @Camilo_Sierra pour le lien, effectivement ca m'aide à y voir plus clair :wink:


(system) #8