Bonjour à tous,
Premièrement je vous remercie de bien vouloir prendre du temps de lire ma question.
Deuxièmement je vous remercie encore plus si vous arrivez à y répondre ^^
Donc voila mon problème : *avec la voix d'un prof de mathématique*
Disont que j'ai une liste de magasin indexé sur elastic, exemple:
{"elements": [ { "type": "livre","id": "203"},{ "type": "dvd","id": "1159"},{ "type": "dvd","id": "722"}]}
{"elements": [ { "type": "livre","id": "203"},{ "type": "dvd","value": "1513"},{ "type": "dvd","id": "723"}]}
{"elements": [ { "type": "livre","id": "203"},{ "type": "dvd","id": "1475"}]}
J'ai ensuite un exemple à trouver dans cette liste:
{"elements": [ { "type": "livre","id": "203"},{ "type": "dvd","value": "1475"},{ "type": "dvd","id": "723"},{ "type": "dvd","id": "1157"},{ "type": "dvd","id": "480"}]}
avec les conditions:
Pour matcher je dois avoir au moins un element(livre ou dvd) qui correspond à ma liste mais aucun element du magasin autre que ceux listés doit être présent.
Résultats attendu:
{"elements": [ { "type": "livre","id": "203"},{ "type": "dvd","id": "1475"}]} passe car il a un livre 203 et un dvd 1475.
{"elements": [ { "type": "livre","id": "203"},{ "type": "dvd","value": "1513"},{ "type": "dvd","id": "723"}]} ne passe pas car le dvd 1513 n'existe pas dans notre exemple.
Ma Problématique:
J'arrive a avoir au moins un element parmis ceux d'exemple, mais je n'arrive pas a exclure les magasins qui ont des elements en trop (pas present dans l'exemple).
Donc je veux le magasin qui correspond le mieux à l'exemple sans avoir d'element en trop.
Ma requete pour le moment:
{
"query":
{
"bool": {
"should": [
{
"nested": {
"path": "elements",
"query": {
"bool": {
"must": [
{"term": {"elements.type": "livre"}},
{"term": {"elements.id": "203"}}
]
}
}
}
},
{
"nested": {
"path": "elements",
"query": {
"bool": {
"must": [
{"term": {"elements.type": "dvd"}},
{"term": {"elements.id": "1557"}
}
]
}
}
}
},
{
"nested": {
"path": "elements",
"query": {
"bool": {
"must": [
{"term": {"elements.type": "dvd"}},
{"term": {"elements.id": "723"}}
]
}
}
}
},
{
"nested": {
"path": "elements",
"query": {
"bool": {
"must": [
{"term": {"elements.type": "dvd"}},
{"term": {"elements.id": "1157"}}
]
}
}
}
},
{
"nested": {
"path": "elements",
"query": {
"bool": {
"must": [
{"term": {"elements.type": "dvd"}},
{"term": {"elements.id": "480"}}
]
}
}
}
}
]
}
}
}
Voila je suis donc un peu bloqué sur ce sujet, j'ai pensé à compter le nombre de match du should par rapport au nombre total d'element des magasins et éliminer ceux qui ont un match < au nombre d'élément. Mais j'ai pas non plus réussi à le transcrire avec elastic.
Donc j'en suis pour le moment à récupérer déjà ce que j'ai et a finir le traitement dans l'applicatif.
Je vous remercie encore.