IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Juin 2022
    Messages
    21
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 24
    Localisation : France, Hauts de Seine (�le de France)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2022
    Messages : 21
    Par d�faut [Elasticsearch] must_not fonctionne si on le place avant une requ�te nested mais pas si on le place dedans
    Bonjour,

    Ma question concerne la construction de requ�te pour elasticsearch, je ne sais pas s'il s'agit de la bonne partie du forum pour la poser.

    J'�cris une application pour rechercher des logs dans l'elastic de mon organisation et l'utilisateur peut rechercher des requ�tes nested sous cette forme :

    pathName:{ field1: "value1" AND field2: "value2" OR field3: "value3" }
    J'aimerais que l'utilisateur puisse demander que certains champs dans la requ�te nested ne soient pas match�s.

    Je peux le faire si je veux que toute la requ�te nested soit non match�, cela donne la requ�te suivante:

    NOT pathName:{ field1: "value1" }
    Et � partir de cette cha�ne de caract�re, je peux g�n�rer la requ�te suivante qui fonctionne bien :

    (La clause must_not[] est plac�e avant la clause nested parceque c'est l'ensemble de la clause nested que je ne veux pas matcher)

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    "query": {
        "bool": {
        	"filter": [
                {
                    "bool": {
                        "must_not": [
                            {"nested": {
                                "path": 'pathName',
                                "query": {
                                    {"bool": {
                                        "should": [
                                            {
                                                "match": {
                                                    "pathName.field1": "value1"
                                                }
                                            }
                                        ],
                                        "minimum_should_match": 1
                                    }}
                                }
                            }}
                        ]
                    }
                }
        		{"range": 
                    {
        			    "@timestamp": {
        			    	"format": 'strict_date_optional_time',
        			    	"gte": "Sat Jul 09 2022 02:00:00 GMT+0200 (heure d’été d’Europe centrale)",
        			    	"lte": "Mon Aug 08 2022 02:00:00 GMT+0200 (heure d’été d’Europe centrale)"
                        }
                    }
                }
            ]
        }
    }
    La requ�te ci-dessus fonctionne bien et renvoie le r�sultat attendu.

    J'aimerais maintenant que mon utilisateur puisse demander � l'int�rieur d'une requ�te nested de matcher certains champs et de ne pas matcher d'autres champs comme ceci:
    pathName:{ NOT field1: "value1" AND field2: "value2" OR NOT field3: "value3" }
    Par exemple, pour la requ�te suivante :

    pathName:{ NOT field1: "value1" }
    (En pratique, il y aura �videmment plus d'un �l�ment dans la requ�te nested , mais pour simplifier, je n'ai mis qu'un seul �l�ment dans la requ�te nested )

    Je veux obtenir tous les objets qui ne match pas pathName.field1:value1.

    A partir de la cha�ne de caract�re pr�c�dente, j'arrive � g�n�rer la requ�te suivante :

    (La clause must_not[] est alors plac�e � l'int�rieur de la clause nested car ce n'est qu'une partie des �l�ments de la clause nested que nous ne voulons pas matcher)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
     
    "query": {
        "bool": {
        	"filter": [
                {"nested": {
                    "path": 'pathName',
                    "query": {
                        {"bool": {
                            "must_not": [
                                {
                                    "bool": {
                                        "should": [
                                            {
                                                "match": {
                                                    "pathName.field1": "value1"
                                                }
                                            }
                                        ],
                                        "minimum_should_match": 1
                                    }
                                }
                            ]
                        }}
                    }
                }},
        		{"range": 
                    {
        			    "@timestamp": {
        			    	"format": 'strict_date_optional_time',
        			    	"gte": "Sat Jul 09 2022 02:00:00 GMT+0200 (heure d’été d’Europe centrale)",
        			    	"lte": "Mon Aug 08 2022 02:00:00 GMT+0200 (heure d’été d’Europe centrale)"
                        }
                    }
                }
            ]
        }
    }
    Mais cette requ�te renvoie les r�sultats sans prendre en compte les clauses must_not[] contenues dans la requ�te nested.

    N'est-il pas possible de sp�cifier une clause must_not[] � l'int�rieur d'une requ�te nested ou est-ce que je g�n�re mal la requ�te envoy�e � elastic ?

    Merci d'avance si vous prenez le temps de m'aider.

  2. #2
    Mod�rateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 654
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activit� : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 654
    Billets dans le blog
    10
    Par d�faut
    Bonjour,

    En marge de votre question je note une combinaison d'op�rateurs ET et OU sans parenth�ses, c'est peu lisible et risqu�, les r�sultats obtenus ne seront peut �tre pas ceux attendus :

    field1: "value1" AND field2: "value2" OR field3: "value3".

  3. #3
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Juin 2022
    Messages
    21
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 24
    Localisation : France, Hauts de Seine (�le de France)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2022
    Messages : 21
    Par d�faut
    Bonjour,

    J'aurai en effet du le pr�ciser, l'op�rateur OR � la priorit� sur l'op�rateur AND mais il y a la possibilit� de mettre une expression entre parenth�ses pour sp�cifier un niveau de d�tail suppl�mentaire.

    Par exemple, la cha�ne de caract�re :
    champs_1: "valeur1" AND (champs_2: "valeur2" OR champs_3: "valeur3")
    signifie je veux les objets qui ont le champs 1 avec la valeur 1 et qui ont aussi soit le champs 2 avec la valeur 2, soit le champs 3 avec la valeur 3.

    Par contre la cha�ne de caract�re :
    champs_1: "valeur1" AND champs_2: "valeur2" OR champs_3: "valeur3"
    signifie je veux les objets qui ont � la fois le champs 1 avec la valeur 1 et le champs 2 avec la valeur 2 ou alors les objets qui ont le champs 3 avec la valeur 3.

Discussions similaires

  1. R�ponses: 2
    Dernier message: 11/02/2015, 18h14
  2. [AC-2010] Une requete qui ne fonctionne que si on enregistre avant ? ! ?
    Par mikadeejay dans le forum Requ�tes et SQL.
    R�ponses: 1
    Dernier message: 21/01/2014, 16h42
  3. R�ponses: 9
    Dernier message: 09/05/2013, 17h27
  4. condition if avant une requ�te sql
    Par Amelie MOREAU dans le forum Langage
    R�ponses: 4
    Dernier message: 24/04/2013, 13h52
  5. Ne prendre que les infos avant une certaine date??
    Par mythtvtalk.com dans le forum MS SQL Server
    R�ponses: 3
    Dernier message: 08/07/2003, 10h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo