Requete sous la forme WHERE (X OR Y ) AND ( W OR Z )

Bonjour,

Nouvelle journée et nouvelle question.

Je souhaite faire une requête de la forme :

SELECT *
FROM Personnes
WHERE nom = "..."
AND  (prenom = "X" OR  adresse = "Y")
AND ( age = "W" OR  sexe  = "Z")

J'ai alors confectionné une requête :

 GET exemple/doc/_search
 {
   "query" : {
     "bool" : {
       "must" : {
         "match": { "nom": "..."}
       }, 
       "should": [
           {"match" : { "prenom ": "X" }}, 
           {"match": {"adresse ": "Y"}},
           {"match" : { "age" : "W" }}, 
           {"match": {"sexe " : "Z"}}
       ],
       "minimum_should_match": 2
     }
   },
}

Cependant, cela ne corresponds pas tout à fait à ce que je veux obtenir. Je voulais créer deux bloc "should" mais cela n'est pas possible. Je ne sais comment dissocier les deux bloc "Ou" avec un "ET" au milieu.

Quelqu'un a t'il une idée ?

Cordialement,

Athimue

Boujour,

Perso j'utilise "term" au lieu de "match", pour être sure d'avoir le résultat exact.
"match" est moins strict... ca dépends de ce que tu recherches.
mais si tu utilises minimum_should_match c'est que tu veux du match.
just pour info au cas ou:

GET exemple/doc/_search
{
"query" : {
"bool" : {
"must" : [
{ "match": { "nom": "..."} }, # where nom = ....
{"bool": { "must" [ # AND
{"bool": { "should" [ # OR
{"match" : { "prenom ": "X" }}, # prenom = X
{"match": {"adresse ": "Y"}}, # adresse = Y
]}}]}},
{"bool": { "must" [ # AND
{"bool": { "should" [ # OR
{"match" : { "age ": "X" }}, # age = W
{"match": {"sexe ": "Y"}}, # sexe = Z
]}}]}},
],
"minimum_should_match": 2
}
},
}

Si je ne me suis pas trompé dans les accolades ca devrait le faire.

1 Like

Y'a aussi du direct sql pour les requetes plus simple:
https://www.elastic.co/guide/en/elasticsearch/reference/6.3/sql-getting-started.html

Je te remercie, c'est ce que je voulais faire !

D'ailleurs, avec la nouvelle version 6.4, on peux faire des requette SQL.

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