Supposons qu'il existe un index de blog simple qui contient deux types: blog et commentaire. Un blog peut avoir plusieurs commentaires. L'indice est créé comme celui-ciElasticsearch: Relation parent-enfant après le retournement
curl -X PUT \
'http://localhost:9200/%3Cblog-%7Bnow%2Fd%7D-000001%3E?pretty=' \
-H 'content-type: application/json' \
-d '{
"mappings": {
"comment": {
"_parent": { "type": "blog" },
"properties": {
"name": { "type": "keyword" },
"comment": { "type": "text" }
}
},
"blog": {
"properties": {
"author": { "type": "keyword" },
"subject": { "type": "text" },
"content": { "type": "text" }
}
}
}
}'
L'indice %3Cblog-%7Bnow%2Fd%7D-000001%3E
est égal à <blog-{now/d}-000001>
(voir here pour plus sur les mathématiques de date). Nous allons ajouter l'alias 'blog-active' à cet index. Cet alias va être utilisé pour stocker des données.
curl -X POST 'http://localhost:9200/_aliases?pretty=' \
-H 'content-type: application/json' \
-d '{ "actions" : [ { "add" : { "index" : "blog-*", "alias" : "blog-active" } } ] }'
Maintenant, si nous faisons les actions suivantes:
1.AJOUT un blog en utilisant blog-active
alias
curl -X POST http://localhost:9200/blog-active/blog/1 \
-H 'content-type: application/json' \
-d '{
"author": "author1",
"subject": "subject1",
"content": "content1"
}'
2.Ajoutez un commentaire sur le blog
curl -X POST \
'http://localhost:9200/blog-active/comment/1?parent=1' \
-H 'content-type: application/json' \
-d '{
"name": "commenter1",
"comment": "new comment1"
}'
3 .Faire un survol avec max_docs = 2
curl -X POST \
http://localhost:9200/blog-active/_rollover \
-H 'content-type: application/json' \
-d '{
"conditions": {
"max_docs": 2
},
"mappings": {
"comment": {
"_parent": { "type": "blog" },
"properties": {
"name": { "type": "keyword" },
"comment": { "type": "text" }
}
},
"blog": {
"properties": {
"author": { "type": "keyword" },
"subject": { "type": "text" },
"content": { "type": "text" }
}
}
}
}'
4. Et ajouter un autre commentaire au blog
curl -X POST \
'http://localhost:9200/blog-active/comment/1?parent=1' \
-H 'content-type: application/json' \
-d '{
"name": "commenter2",
"comment": "new comment2"
}'
Maintenant, si nous cherchons tous les indices de blog pour tous les commentaires sur les blogs 'de Auteur1' avec (blog-%2A
est blog-*
)
curl -X POST \
http://localhost:9200/blog-%2A/comment/_search \
-H 'content-type: application/json' \
-d '{
"query": {
"has_parent" : {
"query" : {
"match" : { "author" : { "query" : "author1" } }
},
"parent_type" : "blog"
}
}
}'
la résultat ne contient que le premier commentaire.
Ceci est dû au fait que le second commentaire est dans le second index qui n'a pas de document de blog parent en lui-même. Donc, il ne connaît pas l'auteur du blog.
Alors, ma question est de savoir comment abordez-je les relations parent-enfant lorsque le remplacement est utilisé?
La relation est-elle même possible dans ce cas?
question similaires: ElasticSearch parent/child on different indexes