> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Syntaxe et exemples de requêtes Lucene pour User Search d’Auth0

> Consultez les détails et des exemples de syntaxe de requête Lucene pour User Search d’Auth0 version 3.

export const AuthCodeGroup = ({children, dropdown}) => {
  const [processedChildren, setProcessedChildren] = useState(children);
  useEffect(() => {
    let unsubscribe = null;
    function init() {
      unsubscribe = window.autorun(() => {
        const processChildren = node => {
          if (typeof node === "string") {
            let processedNode = node;
            for (const [key, value] of window.rootStore.variableStore.values.entries()) {
              const escapedKey = key.replaceAll(/[.*+?^${}()|[\]\\]/g, (String.raw)`\$&`);
              processedNode = processedNode.replaceAll(new RegExp(escapedKey, "g"), value);
            }
            return processedNode;
          } else if (Array.isArray(node)) {
            return node.map(processChildren);
          } else if (node && node.props && node.props.children) {
            return {
              ...node,
              props: {
                ...node.props,
                children: processChildren(node.props.children)
              }
            };
          }
          return node;
        };
        setProcessedChildren(processChildren(children));
      });
    }
    if (window.rootStore) {
      init();
    } else {
      window.addEventListener("adu:storeReady", init);
    }
    return () => {
      window.removeEventListener("adu:storeReady", init);
      unsubscribe?.();
    };
  }, [children]);
  return <CodeGroup dropdown={dropdown}>{processedChildren}</CodeGroup>;
};

export const AuthCodeBlock = ({filename, icon, language, highlight, children}) => {
  const [displayText, setDisplayText] = useState(children);
  const [copyText, setCopyText] = useState(children);
  const wrapperRef = React.useRef(null);
  useEffect(() => {
    let unsubscribe = null;
    function init() {
      if (!window.autorun || !window.rootStore) {
        return;
      }
      unsubscribe = window.autorun(() => {
        let processedChildrenForDisplay = children;
        let processedChildrenForCopy = children;
        for (const [key, value] of window.rootStore.variableStore.values.entries()) {
          const escapedKey = key.replaceAll(/[.*+?^${}()|[\]\\]/g, (String.raw)`\$&`);
          let displayValue = value;
          if (key === "{yourClientSecret}" && value !== "{yourClientSecret}") {
            displayValue = value.substring(0, 3) + "*****MASQUÉ*****";
          }
          processedChildrenForDisplay = processedChildrenForDisplay.replaceAll(new RegExp(escapedKey, "g"), displayValue);
          processedChildrenForCopy = processedChildrenForCopy.replaceAll(new RegExp(escapedKey, "g"), value);
        }
        setDisplayText(processedChildrenForDisplay);
        setCopyText(processedChildrenForCopy);
      });
    }
    if (window.rootStore) {
      init();
    } else {
      window.addEventListener("adu:storeReady", init);
    }
    return () => {
      window.removeEventListener("adu:storeReady", init);
      unsubscribe?.();
    };
  }, [children]);
  useEffect(() => {
    if (!wrapperRef.current) return;
    const originalWriteText = navigator.clipboard.writeText.bind(navigator.clipboard);
    let isOverriding = false;
    const handleClick = e => {
      const button = e.target.closest('[data-testid="copy-code-button"]');
      if (!button || !wrapperRef.current.contains(button)) return;
      isOverriding = true;
      navigator.clipboard.writeText = text => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
          return originalWriteText(copyText);
        }
        return originalWriteText(text);
      };
      setTimeout(() => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
        }
      }, 100);
    };
    const wrapper = wrapperRef.current;
    wrapper.addEventListener('click', handleClick, true);
    return () => {
      wrapper.removeEventListener('click', handleClick, true);
      if (navigator.clipboard.writeText !== originalWriteText) {
        navigator.clipboard.writeText = originalWriteText;
      }
    };
  }, [copyText]);
  return <div ref={wrapperRef}>
      <CodeBlock filename={filename} icon={icon} language={language} lines highlight={highlight}>
        {displayText}
      </CodeBlock>
    </div>;
};

Lorsque vous [listez les utilisateurs](./list-and-search-users), vous pouvez filtrer les résultats à l’aide de requêtes de recherche utilisant la syntaxe de requête Lucene.

La [référence de la syntaxe de requête Lucene](https://lucene.apache.org/core/2_9_4/queryparsersyntax.html) fait autorité, mais de façon générale, la chaîne de requête est analysée en une série de termes et d’opérateurs booléens.

<div id="terms">
  ## Termes
</div>

Les [termes](https://lucene.apache.org/core/2_9_4/queryparsersyntax.html#Terms) définissent les chaînes à rechercher. Les termes prennent en charge les champs, les caractères génériques et les plages.

<div id="fields">
  ### Champs
</div>

Les [champs](https://lucene.apache.org/core/2_9_4/queryparsersyntax.html#Fields) définissent où rechercher la chaîne indiquée. La [liste complète des attributs du profil utilisateur](/docs/fr-ca/manage-users/user-accounts/user-profiles/user-profile-structure) indique quels champs sont interrogeables.

* Toutes les valeurs de recherche sont sensibles à la casse, à l’exception de celles des [champs du profil utilisateur normalisé](/docs/fr-ca/manage-users/user-accounts/user-profiles/normalized-user-profile-schema) (`email`, `name`, `given_name`, `family_name` et `nickname`), qui ne le sont pas.

* Vous pouvez effectuer des recherches dans les champs `app_metadata` et `user_metadata` dont le type de données est booléen, entier, double, texte, objet ou tableau.

* Vous ne pouvez pas rechercher les champs de métadonnées qui contiennent un tableau vide, un objet vide ou une valeur `null`, car ces valeurs ne sont pas indexées.

* Les termes sans nom de champ ne correspondent pas à `user_metadata`.

| Critères de recherche                                      | Exemple de requête                      |
| ---------------------------------------------------------- | --------------------------------------- |
| Utilisateurs dont le nom est exactement "eugenio"          | `name:"eugenio"`                        |
| Utilisateurs dont le domaine de courriel est `example.com` | `email.domain:"example.com"`            |
| Utilisateurs provenant d’une connexion précise             | `identities.connection:"google-oauth2"` |

Lorsque vous recherchez des métadonnées, vous pouvez rechercher des valeurs imbriquées à l’aide du chemin d’accès au champ. Si le champ est imbriqué dans un tableau, vous pouvez ignorer le niveau du tableau. Par exemple, avec la structure `user_metadata` suivante :

```json theme={null}
{
  "full_name": "Example Name",
  "display": {
    "preferredLanguage": "en",
    "fontSize": 13
  },
  "addresses":{
    "cities": [ "Paris", "Seattle" ]
  }
}
```

| Critères de recherche                                 | Exemple de requête                                    |
| ----------------------------------------------------- | ----------------------------------------------------- |
| Utilisateurs dont le nom complet est "Example Name"   | `user_metadata.full_name:"Example Name"`              |
| Utilisateurs ayant défini une langue préférée         | `q: _exists_:user_metadata.display.preferredLanguage` |
| Utilisateurs dont la taille de police est réglée à 13 | `q: user_metadata.display.fontSize:13`                |
| Utilisateurs dont les villes comprennent Paris        | `q: user_metadata.addresses.cities:"Paris"`           |

<div id="wildcards">
  ### Caractères génériques
</div>

Les [caractères génériques](https://lucene.apache.org/core/2_9_4/queryparsersyntax.html#Wildcard%20Searches) permettent de faire correspondre plusieurs caractères à l’aide de la syntaxe `*`.

* Pour faire correspondre un suffixe, les chaînes littérales doivent comporter au moins 3 caractères. Par exemple, `name:*abc` est autorisé, mais `name:*ab` ne l’est pas.

* Vous ne pouvez pas effectuer de recherche avec des caractères génériques dans `user_metadata`.

| Critères de recherche                                      | Exemple de requête |
| ---------------------------------------------------------- | ------------------ |
| Utilisateurs dont le nom contient « example »              | `name:*example*`   |
| Utilisateurs dont l’adresse courriel commence par « test » | `email:test*`      |

<div id="ranges">
  ### Plages
</div>

Les [plages](https://lucene.apache.org/core/2_9_4/queryparsersyntax.html#Range%20Searches) correspondent aux valeurs comprises entre les bornes inférieure et supérieure spécifiées.

* Vous ne pouvez pas effectuer de recherche par plage dans `user_metadata`.

| Critères de recherche                                              | Exemple de requête                      |
| ------------------------------------------------------------------ | --------------------------------------- |
| Utilisateurs ayant effectué 9 connexions ou moins                  | `logins_count:[* TO 10}`                |
| Utilisateurs ayant effectué de 10 à 99 connexions                  | `logins_count:[10 TO 100}`              |
| Utilisateurs ayant effectué 100 connexions ou plus                 | `logins_count:[100 TO *]`               |
| Utilisateurs dont la dernière connexion date d’avant 2025          | `last_login:[* TO 2024-12-31]`          |
| Utilisateurs dont la dernière connexion a eu lieu en décembre 2025 | `last_login:[2025-12-01 TO 2025-12-31]` |

<div id="boolean-operators">
  ## Opérateurs booléens
</div>

Les [opérateurs booléens](https://lucene.apache.org/core/2_9_4/queryparsersyntax.html#Boolean%20operators) permettent de combiner logiquement des termes. Ils s’appliquent à tous les champs du profil utilisateur normalisé et aux champs de métadonnées racine.

| Critères de recherche                                                                | Exemple de requête                                    |
| ------------------------------------------------------------------------------------ | ----------------------------------------------------- |
| Utilisateurs dont le nom correspond exactement à « example name » ou à « test user » | `name:("example name" OR "test user")`                |
| Utilisateurs sans adresse courriel vérifiée                                          | `NOT _exists_:email_verified OR email_verified:false` |
| Utilisateurs qui ne se sont jamais connectés                                         | `NOT _exists_:logins_count OR logins_count:0`         |
