À propos des clés étrangères
CES 7.0.5388+ (avril 2013)
Dans un système où un document contient un champ qui est l'identificateur d'un autre document, il est souvent nécessaire de pouvoir indexer le document référencé, et non l'identificateur. Il est également nécessaire de pouvoir savoir quand un élément référencé change afin que le parent puisse être mis à jour dans l'index, lors de la prochaine actualisation incrémentale, même si le contenu du parent n'a pas changé. Une clé étrangère répond à ces besoins.
Exemple : Dans Salesforce, le nom de compte peut n'être disponible que dans les documents Accounts. Seul l'identificateur du compte est défini dans les enfants du compte tels que les opportunités ou les cas. En définissant une relation de clé étrangère Account à Name, vous pouvez, en temps de requête, rechercher @syssfaccountname==ACompanyName et trouver des documents correspondants, même si ceux-ci n'ont pas le champ syssfaccountname mais ont le champ syssfaccountid. Le lien est fait sous la hotte, sans heurts. Aussi, le champ syssfaccountname peut être placé dans les résultats pour affichage, si nécessaire.
<ForeignKeys>
<ForeignKey ID="123">
<KeyField>syssfaccountid</KeyField>
<ValueField>syssfaccountname</ValueField>
<FreeTextSearch>true</FreeTextSearch>
</ForeignKey>
</ForeignKeys>
Les clés étrangères prennent également en charge les correspondances de sous-chaînes.
Exemple : Si un nom de compte est "Government of Canada", la requête @syssfaccountname=Canada retourne ce compte ainsi que tout autre compte dont le nom inclut Canada.
L'option FreeTextSearch, lorsque définie à true, permet aux utilisateurs de rechercher également le contenu des champs de valeur FreeTextSearch.
Exemple : Encore une fois, si un nom de compte est "Government of Canada", si l'option FreeTextSearch est définie à true, taper Canada dans la boîte de recherche retourne ce compte, même si le terme Canada n'est présent que dans la valeur de champ de la clé étrangère.
La relation de clé étrangère peut également être utilisée par des facettes ou par ListFacetFieldValues à l'aide d'un champ de recherche. Vous pouvez générer la facette dans le champ syssfaccountid qui est définie dans tous les documents et faire afficher plutôt le champ syssfaccountname, même si ce champ n'est défini que dans un sous-ensemble très petit de documents.
La fonctionnalité de clé étrangère fonctionne sans heurts à travers deux tranches d'index afin que si un compte et une opportunité associée sont stockés dans des tranches d'index différentes, la recherche fonctionne.
Note : CES 7.0.6424+ (février 2014) Les clés étrangères prennent en charge le mappage entre plusieurs champs de clés et un champ de valeur unique.
Exemple : Un site Web de voyages contient le champ AirportName défini pour les enregistrements de l'aéroport ainsi que les champs DepartureAirportID et ArrivalAirportID définis pour les enregistrements de vols.
Lorsque vous recherchez @airportname=gaulle dans le but de trouver tous les documents liés à l'aéroport Charles de Gaulle de
Paris (dont le numéro d'identification est 9), la recherche doit être :
@airportname=gaulle OR @DepartureAirportID=9 OR @ArrivalAirportID=9.
La définition de clé étrangère suivante pour le mappage d'un champ de clés multiples à un champ à valeur unique permet de retourner les résultats attendus pour la recherche @airportname=gaulle :
<ForeignKey ID="1">
<KeyField>departureairportid</KeyField>
<ValueField>airportname</ValueField>
</ForeignKey>
<ForeignKey ID="2">
<KeyField>arrivalairportid</KeyField>
<ValueField>airportname</ValueField>
</ForeignKey>
Limites
-
Présentement, la configuration de la clé étrangère doit être effectuée manuellement. En raison du fait qu'une telle configuration peut avoir d'importantes conséquences, vous devez contacter Coveo Support pour obtenir de l'aide dans l'installation des clés étrangères.
-
Les champs de clé et de valeur doivent tous les deux être :
-
Type String
-
Champ de facette (voir Ajout d'un champ de facette)
-
-
Les correspondances de caractères de remplacement ne sont pas prises en charge.
Exemple : La requête @syssfaccountname=Cana* ne fonctionnera pas.
-
Les relations de clés étrangères ne sont pas spécifiques à une source ou à une collection. Si les noms des champs de clé et de valeur sont communs, la relation de clé étrangère s'applique à toute source dans lesquelles ces champs sont présents.
-
Pour des champs de cardinalité très élevés (champs comportant plus d'un million de valeurs distinctes), le démarrage initial de l'index peut prendre une minute ou plus. Les nouvelles valeurs sont ajoutées par la validation secondaire afin que, dans le pire des cas, un identificateur puisse faire associer sa valeur dans les deux minutes qui suivent la fin de l'indexation.