Mapping relationnel?

121 views
Skip to first unread message

Raphi

unread,
Jul 16, 2012, 3:01:42 PM7/16/12
to elastics...@googlegroups.com
Bonjour,

je viens de me lancer avec ES et avant de poser cette question j'ai bien googler plusieurs heures mais sans resultats significatifs.

Les exemples donnes dans les tutos ou meme sur la doc officielle sont toujours tres simples.
Si je prends l'exemple concret d'un post avec des tags associes ainsi que des commentaires, je possede une BDD avec les tables Post, Tag et Comment avec les relations qui vont bien.
Comment definir le mapping pour que lorsque je query sur le document Post, il prenne en compte les tags?
Et est-il possible de faire un tri pour ordonner les resultats selon le nombre de commentaires que possede un post par exemple?

Merci

David Pilato

unread,
Jul 16, 2012, 3:27:43 PM7/16/12
to elastics...@googlegroups.com
Si un post contient des tags, il faut le stocker en tant que document Post avec ses tags (sous forme de tableau par exemple)

Oublie le relationnel et pense globalement Document (ou Objet).
C'est le plus difficile : oublier ce que l'on sait ! Ensuite, le reste coule de source !

David ;-)
Twitter : @dadoonet / @elasticsearchfr
--
---
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/

Raphi

unread,
Jul 16, 2012, 3:35:46 PM7/16/12
to elastics...@googlegroups.com
Effectivement je pense encore trop relationnel^^

Justement, comment faire pour stocker ces tags dans le meme document?
Parceque actuellement le mapping est effectue grace a la conf suivante:

post:
                    mappings:
                        title: { boost: 10, analyzer: my_analyzer }
                    persistence:
                        driver: orm
                        model: Ology\SocialBundle\Entity\Post

Chaque fois qu'un nouveau post est cree ou modifie, ES l'index grace a ce fichier de config.
Or comment lui indiquer de prendre les tags?

Merci!

David Pilato

unread,
Jul 16, 2012, 3:39:24 PM7/16/12
to elastics...@googlegroups.com
C'est quoi cette syntaxe driver: orm ?
ça vient d'un plugin ?

--

Raphi

unread,
Jul 16, 2012, 3:53:08 PM7/16/12
to elastics...@googlegroups.com
Ca vient d'un fichier de config yaml dans Symfony2.
L'ORM notifie ES qu'un changement (creation, update, delete...) a ete effectue sur telle instance.

David Pilato

unread,
Jul 16, 2012, 3:57:32 PM7/16/12
to elastics...@googlegroups.com
Ok. Je ne connais pas.

En parlant ES pur, je dirais : envoie un document via CURL du type :
{
"title":"mon titre",
"tags":["tag1","tag2"]
}

Comment fait-on ça avec Symfony2 ? Aucune idée !

--

Raphi

unread,
Jul 17, 2012, 9:54:20 AM7/17/12
to elastics...@googlegroups.com
Ok je vois.

Et a quoi sert les types objets ou nested?

Merci en tout cas, ca m'a permis de comprendre un peu mieux le fonctionnement.

David Pilato

unread,
Jul 17, 2012, 10:33:48 AM7/17/12
to elastics...@googlegroups.com

Les objets te permettent de faire un truc un peu plus compliqué que l'exemple que j'ai donné:

{
"title":"mon titre",
"myobj1" : { "prop11":"tag1", "prop12":"newtag1" },
"myobj2" : { "prop21":"tag2", "prop22":"newtag2" }
}

 

myobj1 et myobj2 sont des champs de type objet.

 

(j'ai fait ça de tête, pas certain que le format soit bon).

 

 

Nested, c'est la même chose sauf que tu références les objets comme étant stockés par ailleurs dans un autre type.

En gros, myobj1 devient un type, myobj2 aussi.

 

Perso, je n'aime pas du tout les nested.

Je ne sais pas si certains l'utilisent (en PROD notamment).

 

 

 

David


--
David Pilato
http://dev.david.pilato.fr/
Twitter : @dadoonet

Reply all
Reply to author
Forward
0 new messages