Définir des synonymes

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Il est courant qu'une organisation utilise une terminologie unique ou des termes faisant référence à un concept ou à une chose. Vous devez définir des synonymes pour établir une équivalence des termes afin d'aider les utilisateurs à trouver des éléments lorsqu'ils effectuent une recherche.

Les synonymes sont définis en indexant des éléments à l'aide d'un schéma courant : _dictionaryEntry.

Les éléments de type _dictionaryEntry peuvent avoir les propriétés suivantes:

Propriété Type Description Obligatoire ?
_terme string Terme à définir. Les valeurs recommandées sont des mots ou des expressions sans trait d'union sans ponctuation. Obligatoire
_synonyme chaîne (répétée) Autres termes à inclure dans les requêtes correspondant à la chaîne définie dans _term. Obligatoire
_onlyApplicableForAttachedSearchApplications booléen Permet de regrouper des synonymes par source de données et application de recherche. Pour en savoir plus, consultez Définir des synonymes spécifiques à une source de données. Facultatif

Lorsqu'un utilisateur inclut la valeur de la propriété _term dans une requête, la requête effective devient term OR synonymes. Par exemple, si le terme "science-fiction" est défini avec le synonyme "science-fiction", une requête contenant le mot "science fiction" correspond aux éléments contenant "science fiction" ou "science-fiction".

Les synonymes ne sont pas appliqués de manière bidirectionnelle. Si la requête porte plutôt sur "SF", Cloud Search n'applique aucun synonyme. La requête ne renvoie que les éléments contenant "SF". Les éléments contenant "science-fiction" sont omis.

Pour que les deux termes soient interchangeables, définissez chaque terme séparément:

Terme Synonymes
science fiction science-fiction
science-fiction science fiction

Lors du traitement de la requête, les traits d'union et autres signes de ponctuation sont supprimés avant l'application des synonymes. La requête "science-fiction" correspond à la requête "SF" _term. Pour créer des synonymes pour des termes auxquels les utilisateurs sont susceptibles d'ajouter un trait d'union, normalisez d'abord _term pour utiliser des espaces blancs au lieu des traits d'union.

En reprenant l'exemple, les définitions suivantes concordent que les requêtes utilisateur considèrent les termes "science fiction", "science fiction", "science fiction" et "science-fiction" comme interchangeables:

Terme Synonymes
science fiction science-fiction, science-fiction
science-fiction science-fiction, science-fiction
science-fiction science fiction, science fiction

Par défaut, les synonymes d'une source de données s'appliquent à l'ensemble du domaine. Plus précisément, les synonymes sont appliqués aux applications de recherche pour toutes les recherches, quelle que soit la source de données. Si vous souhaitez utiliser des synonymes propres à une source de données, consultez Définir des synonymes spécifiques à une source de données.

Définir des synonymes globaux à l'aide du SDK Cloud Search

Vous pouvez utiliser le SDK Content Connector pour définir des termes et leurs synonymes. Pour savoir comment créer un connecteur, consultez l'article Créer un connecteur de contenu.

L'extrait de code suivant illustre la création d'un objet RepositoryDoc représentant le terme et le synonyme à partir d'un enregistrement de fichier CSV:

DictionaryConnector.java
/**
 * Creates a document for indexing.
 *
 * For this connector sample, the created document is domain public
 *  searchable. The content is a simple text string.
 *
 * @param record The current CSV record to convert
 * @return the fully formed document ready for indexing
 */
private ApiOperation buildDocument(CSVRecord record) {
  // Extract term and synonyms from record
  String term = record.get(0);
  List<String> synonyms = StreamSupport.stream(record.spliterator(), false)
      .skip(1) // Skip term
      .collect(Collectors.toList());

  Multimap<String, Object> structuredData = ArrayListMultimap.create();
  structuredData.put("_term", term);
  structuredData.putAll("_synonym", synonyms);

  if (Configuration.getBoolean("dictionary.attachedToSearchApp", false).get()) {
    structuredData.put("_onlyApplicableForAttachedSearchApplications", true);
  }

  String itemName = String.format("dictionary/%s", term);

  // Using the SDK item builder class to create the item
  Item item =
      IndexingItemBuilder.fromConfiguration(itemName)
          .setItemType(IndexingItemBuilder.ItemType.CONTENT_ITEM)
          .setObjectType("_dictionaryEntry")
          .setValues(structuredData)
          .setAcl(DOMAIN_PUBLIC_ACL)
          .build();

  // Create the fully formed document
  return new RepositoryDoc.Builder()
      .setItem(item)
      .build();
}

Tenez compte des points suivants lorsque vous définissez des synonymes:

  • Les synonymes doivent être publics pour le domaine. Dans l'exemple précédent, vous pouvez définir la LCA sur DOMAIN_PUBLIC_ACL.
  • Les propriétés suivantes ne doivent pas être définies pour votre fichier de configuration, car elles remplacent le paramètre public du domaine dans votre code :
    • defaultAcl.mode=FALLBACK
    • defaultAcl.public=true

Définir des synonymes spécifiques à l'application de recherche

Par défaut, les synonymes sont appliqués à toutes les sources de données de toutes les applications de recherche.

Toutefois, supposons que votre organisation dispose d'équipes d'ingénierie et de vente distinctes, et que vous souhaitiez fournir à chaque équipe une expérience de recherche différente, y compris des synonymes spécifiques à un poste. Dans ce cas, vous pouvez créer une application de recherche avec une source de données et des synonymes spécifiques à l'ingénierie, et une autre application de recherche avec une source de données et des synonymes spécifiques aux ventes. Pour atteindre cet objectif, indexez chaque synonyme dans une source de données spécifique à l'aide de _onlyApplicableForAttachedSearchApplications=true. Ce paramètre limite les synonymes de sorte qu'ils ne soient appliqués qu'aux applications de recherche incluant une source de données spécifique.

Par exemple, l'ajout de la ligne de code suivante à l'exemple de code précédent garantit que les synonymes indexés sont spécifiques à la source de données:

structuredData.put("_onlyApplicableForAttachedSearchApplications", true);