Chaque connecteur est associé à un fichier de configuration contenant les paramètres utilisés par le connecteur, tels que l'ID de votre dépôt. Les paramètres sont définis en tant que paires clé-valeur, telles que api.sourceId=1234567890abcdef
.
Le SDK Google Cloud Search contient plusieurs paramètres de configuration fournis par Google qui sont utilisés par différents connecteurs. Parmi les paramètres de configuration fournis par Google, seuls les paramètres Accès à la source de données doivent être définis dans votre fichier de configuration. Vous n'avez pas besoin de redéfinir les paramètres fournis par Google dans votre fichier de configuration, sauf si vous souhaitez remplacer leurs valeurs par défaut.
Ce document de référence décrit les paramètres de configuration fournis par Google.
Exemple de fichier de configuration
L'exemple suivant montre un fichier de configuration d'identité avec des paires clé/valeur des paramètres.
# # Configuration file sample # api.sourceId=1234567890abcdef api.identitySourceId=0987654321lmnopq api.serviceAccountPrivateKeyFile= ./PrivateKey.json # # Traversal schedules # schedule.traversalIntervalSecs=7200 schedule.incrementalTraversalIntervalSecs=600 # # Default ACLs # defaultAcl.mode=fallback defaultAcl.public=true
Paramètres couramment définis
Cette section liste les paramètres de configuration courants obligatoires et facultatifs. Si vous ne modifiez pas les valeurs des paramètres facultatifs, le connecteur utilise les valeurs par défaut fournies par le SDK.
Accès à la source de données
Le tableau suivant répertorie tous les paramètres requis pour figurer dans un fichier de configuration. Les paramètres à utiliser dépendent du type de connecteur que vous créez (connecteur de contenu ou connecteur d'identité).
Paramètre | Paramètre |
---|---|
ID de la source de données | api.sourceId=1234567890abcdef
Ce paramètre est requis par un connecteur pour identifier l'emplacement de votre dépôt. Vous obtenez cette valeur lorsque vous ajoutez une source de données à la recherche. Ce paramètre doit figurer dans les fichiers de configuration du connecteur. |
ID de la source d'identité | api.identitySourceId=0987654321lmnopq
Ce paramètre est requis par les connecteurs d'identité pour identifier l'emplacement d'une source d'identité externe. Vous avez obtenu cette valeur lorsque vous avez mappé les identités des utilisateurs dans Cloud Search. Ce paramètre doit figurer dans tous les fichiers de configuration du connecteur d'identité. |
Fichier de clé privée du compte de service | api.serviceAccountPrivateKeyFile=./PrivateKey.json
Ce paramètre contient la clé privée nécessaire pour accéder au dépôt. Vous avez obtenu cette valeur lorsque vous avez configuré l'accès à l'API REST Google Cloud Search. Ce paramètre doit figurer dans tous les fichiers de configuration. |
ID du compte de service | api.serviceAccountId=123abcdef4567890
Ce paramètre spécifie l'ID du compte de service. La valeur de chaîne vide par défaut n'est autorisée que lorsque le fichier de configuration spécifie un paramètre de fichier de clé privée. Ce paramètre est obligatoire si votre fichier de clé privée n'est pas une clé JSON. |
ID de compte Google Workspace | api.customerId=123abcdef4567890
Ce paramètre spécifie le numéro du compte Google Workspace de l'entreprise. Vous avez obtenu cette valeur lorsque vous avez mappé les identités des utilisateurs dans Cloud Search. Ce paramètre est requis lors de la synchronisation des utilisateurs à l'aide d'un connecteur d'identité. |
URL racine | api.rootUrl=baseURLPath
Ce paramètre spécifie le chemin d'URL de base du service d'indexation. La valeur par défaut de ce paramètre est une chaîne vide qui est convertie en |
Horaires de balayage
Les paramètres de planification déterminent la fréquence à laquelle le connecteur attend entre chaque balayage.
Paramètre | Paramètre |
---|---|
Balayage complet au démarrage du connecteur | schedule.performTraversalOnStart=true|false
Le connecteur effectue un balayage complet au démarrage du connecteur, au lieu d'attendre que le premier intervalle expire. La valeur par défaut est |
Balayage complet après un intervalle | schedule.traversalIntervalSecs=intervalInSeconds
Le connecteur effectue un balayage complet après un intervalle spécifié. Spécifiez l'intervalle entre les balayages, en secondes. La valeur par défaut est |
Quitter après un seul balayage | connector.runOnce=true|false
Le connecteur effectue un balayage complet, puis se ferme. Ce paramètre ne doit être défini sur |
Balayage incrémentiel après un intervalle | schedule.incrementalTraversalIntervalSecs=intervalInSeconds
Le connecteur effectue un balayage incrémentiel après un intervalle spécifié.
Indiquez l'intervalle entre les balayages, en secondes. La valeur par défaut est |
Intervalles prévus pour la file d'attente des sondages | schedule.pollQueueIntervalSecs=interval_in_seconds
Intervalle entre les intervalles de file d'attente de sondage programmés (en secondes). Il n'est utilisé que par un connecteur de balayage de liste. La valeur par défaut est |
Listes de contrôle d'accès
Le connecteur contrôle l'accès aux éléments à l'aide de LCA. Les paramètres multiples vous permettent de protéger l'accès des utilisateurs aux enregistrements indexés avec des LCA.
Si des informations de LCA sont associées à chaque élément dans votre dépôt, importez toutes les informations de LCA pour contrôler l'accès aux éléments dans Cloud Search. Si votre dépôt ne fournit pas d'informations partielles ou aucune LCA, vous pouvez fournir les informations de LCA par défaut dans les paramètres suivants, que le SDK fournit au connecteur.
Paramètre | Paramètre |
---|---|
Mode LCA | defaultAcl.mode=mode
Détermine quand la LCA par défaut doit être appliquée. Valeurs correctes :
Le mode par défaut est |
LCA publique par défaut | defaultAcl.public=true|false
La LCA par défaut utilisée pour l'ensemble du dépôt est définie sur l'accès public au domaine.
La valeur par défaut est |
Lecteurs de groupe de la LCA commune | defaultAcl.readers.groups=google:group1@mydomain.com,
group2 |
Lecteurs de LCA courants | defaultAcl.readers.users=user1, user2,
google:user3@mydomain.com |
Lecteurs de groupe refusés de la LCA commune | defaultAcl.denied.groups=group3 |
Lecteurs refusés de la LCA commune | defaultAcl.denied.users=user4, user5 |
Accès à la totalité du domaine | Pour indiquer que chaque enregistrement indexé doit être accessible à tous les utilisateurs du domaine, définissez les deux paramètres suivants avec des valeurs :
|
LCA commune définie | Pour spécifier une LCA pour chaque enregistrement du dépôt de données, définissez toutes les valeurs de paramètre suivantes :
|
Paramètres de configuration des métadonnées
Certaines métadonnées de l'élément sont configurables. Les connecteurs peuvent définir des champs de métadonnées configurables lors de l'indexation. Si le connecteur ne définit aucun champ, les paramètres du fichier de configuration sont utilisés pour définir le champ.
Le fichier de configuration comporte une série de paramètres de configuration de métadonnées nommés indiqués par un suffixe .field
, tel que itemMetadata.title.field=movieTitle
. S'il existe une valeur pour ces paramètres, elle est utilisée pour configurer le champ de métadonnées. Si aucune valeur n'est définie pour le paramètre de métadonnées nommé, les métadonnées sont configurées à l'aide d'un paramètre avec le suffixe .defaultValue
.
Le tableau suivant présente les paramètres de configuration des métadonnées.
Paramètre | Paramètre |
Titre | itemMetadata.title.field=movieTitle
itemMetadata.title.defaultValue=
Titre de l'article. Si title.field n'est pas défini sur une valeur, la valeur de title.defaultValue est utilisée.
|
URL du dépôt source | itemMetadata.sourceRepositoryUrl.field=url
itemMetadata.sourceRepositoryUrl.defaultValue=https://www.imdb.com/title/tt0031381/
URL de l'article utilisée dans les résultats de recherche. Vous pouvez simplement définir le defaultValue pour qu'il contienne une URL pour l'ensemble du dépôt, par exemple si votre référentiel est un fichier CSV et qu'il n'y a qu'une seule URL pour chaque élément. Si sourceRepositoryUrl.field n'est pas défini sur une valeur, la valeur de sourceRepositoryUrl.defaultValue est utilisée.
|
Nom du conteneur | itemMetadata.containerName.field=containerName
itemMetadata.containerName.defaultValue=myDefaultContainerName
Nom du conteneur de l'élément (nom d'un répertoire ou d'un dossier de système de fichiers, par exemple). Si containerName.field n'est pas défini, la valeur de containerName.defaultValue est utilisée.
|
Type d'objet | itemMetadata.objectType.field=type itemMetadata.objectType.defaultValue=
Type d'objet utilisé par le connecteur, tel que défini dans le schéma. Si cette propriété n'est pas spécifiée, le connecteur n'indexe aucune donnée structurée. Si la valeur de objectType.field n'est pas définie, la valeur de objectType.defaultValue est utilisée.
|
Date et heure de création | itemMetadata.createTime.field=releaseDate
itemMetadata.createTime.defaultValue=1940-01-17
Horodatage de la création du document. Si createTime.field n'est pas défini sur une valeur, la valeur de createTime.defaultValue est utilisée.
|
Date et heure de mise à jour | itemMetadata.updateTime.field=releaseDate
itemMetadata.updateTime.defaultValue=1940-01-17
Horodatage de la dernière modification de l'élément. Si updateTime.field n'est pas défini, la valeur de updateTime.defaultValue est utilisée.
|
Langue du contenu | itemMetadata.contentLanguage.field=languageCode
itemMetadata.contentLanguage.defaultValue=
Langue du contenu des documents indexés. Si contentLanguage.field n'est pas défini sur une valeur, la valeur de contentLanguage.defaultValue est utilisée.
|
Type MIME | itemMetadata.mimeType.field=mimeType
itemMetadata.mimeType.defaultValue=
Type MIME original de ItemContent.content dans le dépôt source. La longueur maximale est de 256 caractères. Si mimeType.field n'est pas défini sur une valeur, la valeur de mimeType.defaultValue est utilisée.
|
Métadonnées de qualité de la recherche | itemMetadata.searchQualityMetadata.quality.field=quality
itemMetadata.searchQualityMetadata.quality.defaultValue=
Indication de la qualité de l'article, utilisée pour influencer la qualité de la recherche. La valeur doit être comprise entre 0,0 (la plus faible) et 1,0 (la plus haute qualité). La valeur par défaut est 0.0. Si quality.field n'est pas défini sur une valeur, la valeur de quality.defaultValue est utilisée.
|
Hachage | itemMetadata.hash.field=hash
itemMetadata.hash.defaultValue=f0fda58630310a6dd91a7d8f0a4ceda2
Valeur de hachage fournie par l'appelant de l'API. Vous pouvez l'utiliser avec la méthode items.push pour calculer l'état modifié. La longueur maximale est de 2 048 caractères. Si hash.field n'est pas défini sur une valeur, la valeur de hash.defaultValue est utilisée.
|
Formats de date et d'heure
Les formats de date et d'heure spécifient les formats attendus dans les attributs de métadonnées. Si le fichier de configuration ne contient pas ce paramètre, des valeurs par défaut sont utilisées. Le tableau suivant présente ce paramètre.
Paramètre | Paramètre |
Formats de date et d'heure supplémentaires | structuredData.dateTimePatterns=MM/dd/uuuu HH:mm:ssXXX
Liste de formats java.time.format.DateTimeFormatter supplémentaires séparés par un point-virgule. Les formats sont utilisés lors de l'analyse des valeurs de chaîne pour tous les champs de date ou d'heure dans les métadonnées ou le schéma. La valeur par défaut est une liste vide, mais les formats RFC 3339 et RFC 1123 sont toujours acceptés.
|
Données structurées
L'API Cloud Search Indexing fournit un service de schéma qui vous permet de personnaliser la manière dont Cloud Search indexe et diffuse vos données. Si vous utilisez un schéma de dépôt local, vous devez spécifier le nom du schéma local de données structurées.
Paramètre | Paramètre |
---|---|
Nom du schéma local | structuredData.localSchema=mySchemaName
Le nom du schéma est lu à partir de la source de données et est utilisé pour les données structurées de dépôt. La valeur par défaut est une chaîne vide. |
Qualité du contenu et de la recherche
Pour les dépôts contenant des enregistrements ou du contenu basé sur des champs (par exemple, un CRM, CVS ou une base de données), le SDK autorise la mise en forme HTML automatique des champs de données. Votre connecteur définit les champs de données au début de son exécution, puis utilise un modèle de contenu pour formater chaque enregistrement de données avant de l'importer dans Cloud Search.
Le modèle de contenu définit l'importance de chaque valeur de champ pour la recherche.
Le champ HTML <title>
est obligatoire et défini comme étant la priorité la plus élevée. Vous pouvez définir des niveaux d'importance de la qualité de la recherche pour tous les autres champs de contenu : élevé, moyen ou faible. Tout champ de contenu non défini dans une catégorie spécifique est associé par défaut à une priorité faible.
Paramètre | Paramètre |
---|---|
Titre HTML du contenu | contentTemplate.templateName.title=myTitleField
Titre HTML du contenu et champ de qualité de recherche la plus élevée. Ce paramètre n'est requis que si vous utilisez un modèle de contenu HTML. La valeur par défaut est une chaîne vide. |
Qualité de recherche élevée pour les champs de contenu | contentTemplate.templateName.quality.high=hField1,hField2
Champs de contenu associés à une priorité de recherche élevée. La valeur par défaut est une chaîne vide. |
Qualité de recherche moyenne pour les champs de contenu | contentTemplate.templateName.quality.medium=mField1,mField2
Champs de contenu associés à une priorité de recherche moyenne. La valeur par défaut est une chaîne vide. |
Faible qualité de recherche des champs de contenu | contentTemplate.templateName.quality.low=lField1,lField2
Champs de contenu associés à une faible priorité de recherche. La valeur par défaut est une chaîne vide. |
Champs de contenu non spécifiés | contentTemplate.templateName.unmappedColumnsMode=value
Comment le connecteur gère les champs de contenu non spécifiés. Les valeurs possibles sont les suivantes :
|
Inclure les noms de champs dans le modèle HTML | contentTemplate.templateName.includeFieldName=true|false
Spécifie si les noms de champ et les données de champ doivent être inclus dans le modèle HTML. La valeur par défaut est |
Paramètres rarement définis
Il est rarement nécessaire de définir les paramètres listés dans cette section. Les paramètres par défaut des paramètres sont définis pour des performances optimales. Google ne recommande pas de définir ces paramètres sur des valeurs différentes de leurs valeurs par défaut sans exigences spécifiques dans votre dépôt.
Configuration du proxy
Le SDK vous permet de configurer votre connecteur pour qu'il utilise un proxy pour les connexions sortantes.
Les paramètres transport.proxy.hostname
et transport.proxy.port
sont requis pour activer le transport via un proxy. Les autres paramètres peuvent être requis si votre proxy requiert une authentification ou fonctionne sur le protocole SOCKS au lieu de HTTP. Si transport.proxy.hostname
n'est pas défini, le SDK n'utilise pas de proxy.
Paramètre | Paramètre |
---|---|
Nom d'hôte | transport.proxy.hostname=hostname
Nom d'hôte du serveur proxy. Ce paramètre est obligatoire lorsque vous utilisez un proxy. |
Port | transport.proxy.port=port
Numéro de port du serveur proxy. Ce paramètre est obligatoire lorsque vous utilisez un proxy. |
Type de proxy | transport.proxy.type=type
Type de proxy. Les valeurs possibles sont les suivantes :
La valeur par défaut est |
Nom d'utilisateur | transport.proxy.username=username
Nom d'utilisateur à utiliser pour créer un jeton d'autorisation de proxy. Ce paramètre est facultatif et ne doit être défini que si votre proxy requiert une authentification. |
Mot de passe | transport.proxy.password=password
Mot de passe à utiliser pour créer un jeton d'autorisation de proxy. Ce paramètre est facultatif et ne doit être défini que si votre proxy requiert une authentification. |
Traverseurs
Le SDK vous permet de spécifier plusieurs balayages individuels pour permettre les balayages parallèles d'un référentiel de données. Les connecteurs de modèles du SDK utilisent cette fonctionnalité.
Paramètre | Paramètre |
---|---|
Taille du pool de threads | traverse.threadPoolSize=size
Nombre de threads créés par le connecteur pour permettre le traitement en parallèle. Un seul itérateur récupère les opérations en série (généralement des objets RepositoryDoc), mais l'API appelle les processus en parallèle à l'aide de ce nombre de threads. La valeur par défaut est |
Taille de la partition | traverse.partitionSize=batchSize
Nombre de La valeur par défaut est |
Demandes de sondages des explorateurs
La base de la file d'attente d'indexation de Cloud Search est une file d'attente prioritaire contenant une entrée pour chaque élément connu. Un connecteur de fiche peut demander à interroger des éléments à partir de l'API d'indexation. Une requête de sondage reçoit les entrées les plus prioritaires de la file d'attente d'indexation.
Les paramètres suivants sont utilisés par le modèle de connecteur de fiches du SDK pour définir les paramètres d'interrogation.
Paramètre | Paramètre |
---|---|
Barre de dépôt | repository.traversers=t1, t2, t3, ...
Crée un ou plusieurs balayages individuels, avec t1, t2, t3 et ... comme nom unique. Chaque robot d'exploration nommé possède son propre ensemble de paramètres identifiés à l'aide de son nom unique (par exemple, |
File d'attente à interroger | traverser.pollRequest.queue=mySpecialQueue
Noms de file d'attente interrogés par ce traverseur. La valeur par défaut est une chaîne vide (implicite "default"). |
traverser.t1.pollRequest.queue=mySpecialQueue
Lorsque vous disposez de plusieurs robots d'exploration, définissez l'état de l'élément pour chaque robot (où t1 représente un robot d'exploration spécifique). |
|
Comportement des sondages | traverser.pollRequest.limit=maxItems
Nombre maximal d'éléments à renvoyer suite à une requête d'interrogation.
La valeur par défaut est |
traverser.t1.pollRequest.limit=limit
Lorsque vous disposez de plusieurs robots d'exploration, définissez l'état de l'élément pour chaque robot (où t1 représente un robot d'exploration spécifique). |
|
État du composant | traverser.pollRequest.statuses=statuses
États spécifiques de cet élément interrogés par ce traverseur, où statuses peut être n'importe quelle combinaison de |
traverser.t1.pollRequest.statuses=statusesForThisTraverser
Lorsque vous disposez de plusieurs robots d'exploration, définissez l'état de l'élément pour chacun d'entre eux (où t1 représente un robot d'exploration spécifique). | |
Charge d'hôte | traverser.hostload=threads
Nombre maximal de threads parallèles actifs disponibles pour l'interrogation. La valeur par défaut est |
traverser.t1.hostload=threadsForThisTraverser
Lorsque vous disposez de plusieurs robots d'exploration, définissez l'état de l'élément pour chacun d'entre eux (où t1 représente un robot d'exploration spécifique). |
|
Timeout | traverser.timeout=timeout
Délai d'inactivité de l'utilisateur lors de l'interruption de cette tentative de sondage via le balayage. La valeur par défaut est |
traverser.t1.timeout=timeoutForThisTraverser
Lorsque vous disposez de plusieurs robots d'exploration, définissez l'état de l'élément pour chacun d'entre eux (où t1 représente un robot d'exploration spécifique). |
|
traverser.timeunit=timeoutUunit
Unités du délai d'expiration. Les valeurs valides sont les suivantes : |
|
traverser.t1.timeunit=timeoutUnit
Lorsque vous disposez de plusieurs robots d'exploration, définissez l'état de l'élément pour chacun d'entre eux (où t1 représente un robot d'exploration spécifique). |
Dans la plupart des cas, un connecteur utilisant le modèle de connecteur de liste de SDK ne nécessite qu'un seul ensemble de paramètres pour l'interrogation. Dans certains cas, vous devrez peut-être définir plusieurs critères d'interrogation si votre algorithme de balayage nécessite de séparer le traitement des éléments à l'aide de différentes files d'attente, par exemple.
Dans ce cas, vous avez la possibilité de définir plusieurs ensembles de paramètres d'interrogation. Commencez par spécifier les noms des ensembles de paramètres à l'aide de repository.traversers
. Pour chaque nom de traceur défini, fournissez le fichier de configuration avec les paramètres du tableau ci-dessus en remplaçant t1
par le nom de l'outil. Un ensemble de paramètres de scrutation est alors créé pour chaque balayage défini.
Points de contrôle
Un point de contrôle permet de suivre l'état d'un balayage incrémentiel.
Paramètre | Paramètre |
---|---|
Répertoire des points de contrôle | connector.checkpointDirectory=/path/to/checkpoint
Spécifie le chemin d'accès au répertoire local à utiliser pour les points de contrôle de balayage incrémentiel et complet. |
Importations de contenu
Le contenu de l'élément est importé dans Cloud Search lorsque la taille du contenu ne dépasse pas le seuil spécifié. Si la taille du contenu dépasse le seuil, il est importé séparément des métadonnées et des données structurées de l'élément.
Paramètre | Paramètre |
---|---|
Seuil de contenu | api.contentUploadThresholdBytes=bytes
Seuil applicable aux contenus qui déterminent si le contenu est intégré à l'élément par rapport à une importation distincte. La valeur par défaut est |
Conteneurs
Le modèle de connecteur complet utilise un algorithme impliquant le concept d'activation/de désactivation temporaire de la file d'attente de sources de données pour détecter les enregistrements supprimés dans la base de données. Cela signifie que lors de chaque balayage complet, les enregistrements récupérés, qui se trouvent dans une nouvelle file d'attente, remplacent tous les enregistrements Cloud Search existants indexés à partir du balayage précédent, qui se trouvent dans une ancienne file d'attente.
Paramètre | Paramètre |
---|---|
Tag de nom de conteneur | traverse.queueTag=instance
Pour exécuter plusieurs instances du connecteur en parallèle afin d'indexer un dépôt de données commun (que ce soit sur différents dépôts de données ou sur des parties distinctes d'un dépôt de données commun) sans interférer les uns avec les autres, attribuez un tag de nom de conteneur unique à chaque exécution du connecteur. Un tag de nom unique empêche une instance de connecteur de supprimer les enregistrements d'un autre utilisateur. Le tag de nom est ajouté à l'ID de file d'attente du connecteur de balayage complet. |
Désactiver la détection des suppressions | traverse.useQueues=true|false
Indique si le connecteur utilise une logique d'activation/de désactivation de file d'attente pour détecter les suppressions. La valeur par défaut est Remarque : Ce paramètre de configuration ne s'applique qu'aux connecteurs mettant en œuvre le modèle |
Règle par lot
Le SDK accepte une règle par lot qui vous permet d'effectuer les actions suivantes:
- Requêtes par lot
- Spécifier le nombre de requêtes dans une file d'attente par lot
- Gérer simultanément des lots
- Vider les requêtes par lot
Le SDK regroupe les requêtes du connecteur pour accélérer le débit pendant les importations. Le déclencheur du SDK permettant d'importer un lot de requêtes dépend du nombre de requêtes ou du délai avant expiration, selon la première éventualité. Par exemple, si le délai de traitement par lot a expiré alors que la taille de lot n'a pas été atteinte ou si le nombre d'éléments est atteint avant l'expiration du délai, l'importation par lot est déclenchée.
Paramètre | Paramètre |
---|---|
Requêtes par lot | batch.batchSize
Requêtes par lot La valeur par défaut est |
Nombre de requêtes dans une file d'attente par lot | batch.maxQueueLength=maxQueueLength
Nombre maximal de requêtes dans une file d'attente d'exécution par lot.
La valeur par défaut est |
Exécution simultanée de lots | batch.maxActiveBatches=maxActiveBatches
Nombre de lots pouvant être exécutés simultanément.
La valeur par défaut est |
Vider automatiquement les requêtes par lot | batch.maxBatchDelaySeconds=maxBatchDelay
Nombre de secondes d'attente avant le vidage automatique des requêtes par lot. La valeur par défaut est |
Vider les requêtes par lot à la fermeture | batch.flushOnShutdown=true|false
Videz les requêtes par lot pendant l'arrêt du service.
La valeur par défaut est |
Gestionnaires d'exceptions
Les paramètres des gestionnaires d'exceptions déterminent la manière dont le balayage s'exécute lorsqu'il rencontre une exception.
Paramètre | Paramètre |
---|---|
Instruction de balayage en cas d'erreur | traverse.exceptionHandler=exceptions
Comportement du balayage après une exception. Les valeurs valides sont les suivantes:
|
Délai d'attente entre les exceptions | abortExceptionHander.backoffMilliSeconds=backoff
Intervalle en millisecondes entre les exceptions détectées par le gestionnaire (généralement utilisées pour traverser un dépôt). La valeur par défaut est |