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


(Athimue) #1

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


(Gabriel Tessier) #2

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:
https://www.elastic.co/guide/en/elasticsearch/reference/6.3/query-dsl-term-query.html

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.


(Gabriel Tessier) #3

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


(Athimue) #4

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


(Charaf Ahmed) #5

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


(system) #6

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