# Pourquoi les requêtes construites par Kibana dans discover n'utilisent-elles pas la requête must?

**URL:** <https://discuss.elastic.co/t/pourquoi-les-requetes-construites-par-kibana-dans-discover-nutilisent-elles-pas-la-requete-must/311438>\
**Category:** Discussions en français\
**Created:** [August 4, 2022, 2:26pm UTC](https://discuss.elastic.co/t/pourquoi-les-requetes-construites-par-kibana-dans-discover-nutilisent-elles-pas-la-requete-must/311438 "2022-08-04T14:26:47Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Vincent92](https://avatars.discourse-cdn.com/v4/letter/v/ea5d25/32.png) [@Vincent92](https://discuss.elastic.co/u/Vincent92)\
**Post date:** [August 4, 2022, 2:26pm UTC](https://discuss.elastic.co/t/pourquoi-les-requetes-construites-par-kibana-dans-discover-nutilisent-elles-pas-la-requete-must/311438/1 "2022-08-04T14:26:47Z")

</div>

Bonjour,

Je développe une application web pour visualiser des données dans un elastic et je m'inspire des requêtes faites par Kibana dans l'application Discover en allant inspecter l'objet requête créé dans l'onglet Inspect de Discover.

J'ai l'impression qu'en dehors des termes négatifs qui utilisent : `"bool":{"must_not" :[]}` pour créer la requête, la requête `must[]` (qui n'est de toute façon pas la même chose que `must_not[]`) n'est jamais utilisée et à la place, Kibana utilise une imbrication de requête `filter[]` et de requête `should[]`.

Y a-t-il une raison particulière de ne pas utiliser la requête `must[]`, surtout si la requête ne contient que des opérateurs **"ET"**?

De plus, les requêtes contenant que des opérateurs **"ET"** ont exactement la même structure d'imbrication de `should[]` que les requêtes contenant que des opérateurs **"OU"**. Du coup comment Kibana fait pour séparer **"je veux ça et ça et ça"** de **"je veux ça ou ça ou ça"**.

Dans mon interpréteur de requête précédent j'avais un objet `should[]` qui contenait plusieurs objet `must[]`. Chaque objet `must[]` permettait de stocker les opérateurs **"ET"** côte à côte, et à chaque fois qu'il y avait un opérateur **"OU"** je créé donc un nouvel objet `must[]` dans l'objet `should[]` principal.

Maintenant que je veux utiliser la même structure que les requêtes faites par l'application Discover de Kibana, je vois que l'objet parent et un `filter[]` suivi d'une imbrication de `should[]`, comment peut on alors séparer un **"ET"** d'un **"OU"**?

Exemple de query créé par Kibana récupéré dans l'onglet Inspect de l'application Discover pour la requête suivante:

`field1:"match_field1" AND field2:"match_field2" AND field3:"match_field3" AND field4:"match_field4" AND field5:"match_field5"`  
Cela donne la requête:

```auto
"query": {
    "bool": {
      "must": [],
      "filter": [
        {
          "bool": {
            "filter": [
              {
                "bool": {
                  "should": [
                    {
                      "match_phrase": {
                        "field1": "match_field1"
                      }
                    }
                  ],
                  "minimum_should_match": 1
                }
              },
              {
                "bool": {
                  "filter": [
                    {
                      "bool": {
                        "should": [
                          {
                            "match_phrase": {
                              "field2": "match_field2"
                            }
                          }
                        ],
                        "minimum_should_match": 1
                      }
                    },
                    {
                      "bool": {
                        "filter": [
                          {
                            "bool": {
                              "should": [
                                {
                                  "match_phrase": {
                                    "field3": "match_field3"
                                  }
                                }
                              ],
                              "minimum_should_match": 1
                            }
                          },
                          {
                            "bool": {
                              "filter": [
                                {
                                  "bool": {
                                    "should": [
                                      {
                                        "match_phrase": {
                                          "field4": "match_field4"
                                        }
                                      }
                                    ],
                                    "minimum_should_match": 1
                                  }
                                },
                                {
                                  "bool": {
                                    "should": [
                                      {
                                        "match_phrase": {
                                          "field5": "match_field5"
                                        }
                                      }
                                    ],
                                    "minimum_should_match": 1
                                  }
                                }
                              ]
                            }
                          }
                        ]
                      }
                    }
                  ]
                }
              }
            ]
          }
        },
        {
          "range": {
            "@timestamp": {
              "gte": "2021-05-04T15:14:08.772Z",
              "lte": "2022-08-04T15:14:08.772Z",
              "format": "strict_date_optional_time"
            }
          }
        }
      ],
      "should": [],
      "must_not": []
    }
  },

```

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

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [August 20, 2022, 1:39pm UTC](https://discuss.elastic.co/t/pourquoi-les-requetes-construites-par-kibana-dans-discover-nutilisent-elles-pas-la-requete-must/311438/2 "2022-08-20T13:39:08Z")

</div>

La requête peut-être énormément simplifiée.

Ça utilise en fait ici un `filter` qui plus rapide qu'un `must`.

Les clauses `should` sont en dessous et individualisées par terme.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [September 17, 2022, 1:39pm UTC](https://discuss.elastic.co/t/pourquoi-les-requetes-construites-par-kibana-dans-discover-nutilisent-elles-pas-la-requete-must/311438/3 "2022-09-17T13:39:41Z")

</div>

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