Doc produitsMenu

Plateforme Coveo 7.0 >
Aide à l'administrateur > Connecteurs > Connecteur de base de données > Récupération d'informations complémentaires avec les sous-requêtes

Complètement de la recherche d'informations avec les sous-requêtes pour le connecteur Database

Le connecteur Database acquiert des informations sur chaque document indexé grâce à une requête effectuée sur une base de données. Pour chaque requête, il est possible d'associer une ou plusieurs sous-requêtes à exécuter et à utiliser afin de compléter les informations.

Exemple : Vous pouvez exécuter une requête principale, et pour chaque rangée, exécuter une sous-requête qui analyse davantage d'informations ou des informations différentes. Tous les résultats d'une seule rangée de la requête principale, avec tout ce qui provient de la sous-requête, sont fusionnés dans un seul document.

Le connecteur exige un fichier de correspondances afin d'être exécuté correctement. Pour chaque type d'association, il est nécessaire de spécifier un Accessor représentant la requête SQL à exécuter.

Spécification de sous-requêtes

Pour spécifier des sous-requêtes, vous devez définir le type d'Accessor à query.

<Accessor type="query">

Après la définition Accessor, ajoutez un nœud AccessorSubQueries avec toutes les sous-requêtes :

<AccessorSubQueries>
  <AccessorSubQuery name="FirstNameLastName" separator=";" behaviorOnMultiRows="join" allowDuplicates = "false">
    SELECT  firstName, 
    lastName
    FROM employeelist
    WHERE Email_id = %[sender]
  </AccessorSubQuery>
</AccessorSubQueries>

Attributs de sous-requête

name

Nom de la sous-requête, référée dans la section Fields de la correspondance (voir Exemple d'un fichier de configuration pour le connecteur Database).

separator

Séparateur utilisé pendant la concaténation de plusieurs rangées.

behaviorOnMultiRows

Action à effectuer si une sous-requête retourne plus d'une rangée. Le seul comportement pris en charge est join, qui concatène des valeurs avec le séparateur donné.

allowDuplicates (optionnel)

Cet attribut est principalement utilisé si votre sous-requête retourne plusieurs rangées. S'il est défini à False, les doublons qui se trouvent dans les résultats sont ignorés lors de la concaténation des résultats. S'il est défini à true, les doublons sont présents.

singleQuoteEscapeSequence (optionnel)

Si la valeur du champ retourné contient des guillemets simples, celles-ci doivent être placées dans une séquence d'échappement. Par défaut, si vous omettez cet attribut, le connecteur fait l'échappement des guillemets simples en les doublant (ex. : ''). Ce mécanisme d'échappement devrait fonctionner dans la plupart des cas. Toutefois, certains types de base de données exigent une séquence d'échappement différente pour les guillemets simples. Dans de tels cas, utilisez cet attribut afin de spécifier la séquence d'échappement des guillemets simples.

Exemple : Pour la base de données MySQL, la séquence d'échappement des guillemets simples est \'. Dans ce cas, dans la balise AccessorSubQuery, incluez l'attribut singleQuoteEscapeSequence comme suit :

<AccessorSubQuery name="FirstNameLastName" separator=";" behaviorOnMultiRows="join" allowDuplicates = "false" singleQuoteEscapeSequence="\'">

Note : L'attribut singleQuoteEscapeSequence est disponible dans CES (Coveo Enterprise Search) 7.0.5425+ (mai 2013).

Clé principale de la sous-requête

Dans une sous-requête, une clé principale qui est utilisée dans la clause WHERE doit respecter le format %[fieldName], qui correspond aux métadonnées acquises de l'accesseur principal. La clé principale est utilisée afin de joindre la requête principale et les sous-requêtes.

Spécification des métadonnées de sous-requête pour les champs

La section <Fields> du fichier de correspondances est utilisée afin de spécifier les métadonnées à utiliser pour l'indexation.

Veuillez vous référer à l'exemple suivant pour une section <Fields> typique d'un fichier de correspondances :

<Fields>
  <Uri>http://www.coveo.com/Emails/details.aspx?Id=%[mid]</Uri>
  <ClickableUri>http://www.coveo.com</ClickableUri>
  <FileName>Message_%[mid].txt</FileName>
  <Title>Message_%[mid]</Title>
  <ModifiedDate>%[date]</ModifiedDate>
  <Body>%[body]</Body>
  <CustomFields>
    <CustomField name="sysAuthor">%[sender]</CustomField>
    <CustomField name="firstName">%[FirstNameLastName.firstName]</CustomField>
    <CustomField name="lastName">%[FirstNameLastName.lastName]</CustomField>
  </CustomFields>
</Fields>

Les métadonnées d'une sous-requête peuvent être spécifiées pour un champ ou un champ personnalisé. La façon de faire la spécification est identique à la façon de le faire lorsque l'on fait référence à un champ provenant de l'accesseur principal: %[subQueryName.fieldName]. Dans l'exemple ci-haut, le champ personnalisé firstName fait référence à une sous-requête intitulée FirstNameLastName et utilise les métadonnées firstName.

Veuillez vous référer à l'exemple suivant pour voir un fichier de correspondances complet, qui est utilisé dans nos tests unitaires :

<?xml version="1.0" encoding="utf-8" ?>
<ODBC>
  <CommonMapping excludedItems="employeelist">
    <AllowedUsers>
      <AllowedUser type="Windows" allowed="true">
        <Name>everyone</Name>
        <Server></Server>
      </AllowedUser>
    </AllowedUsers>
  </CommonMapping>
  <Mapping type="message">
    <Accessor type="query">
      SELECT message.mid,
      message.sender,
      message.date,
      message.message_id,
      message.subject,
      message.body,
      message.folder
      FROM message
      WHERE DATE like '2001-04-07%'
    </Accessor>
      <AccessorSubQueries>
        <AccessorSubQuery name="FirstNameLastName" separator=";" behaviorOnMultiRows="join">
          SELECT  firstName, lastName
          FROM employeelist
          WHERE Email_id = %[sender]
        </AccessorSubQuery>
      </AccessorSubQueries>
    <Fields>
      <Uri>http://www.coveo.com/Emails/details.aspx?Id=%[mid]</Uri>
      <ClickableUri>http://www.coveo.com</ClickableUri>
      <FileName>Message_%[mid].txt</FileName>
      <Title>Message_%[mid]</Title>
      <ModifiedDate>%[date]</ModifiedDate>
      <Body>%[body]</Body>
      <CustomFields>
        <CustomField name="sysAuthor">%[sender]</CustomField>
        <CustomField name="firstName">%[FirstNameLastName.firstName]</CustomField>
        <CustomField name="lastName">%[FirstNameLastName.lastName]</CustomField>
      </CustomFields>
    </Fields>
    <AllowedUsers>
      <AllowedUser type="CustomGroup" allowed="true">
        <Name>everyone</Name>
        <Server></Server>
      </AllowedUser>
    </AllowedUsers>
  </Mapping>
</ODBC>