Définir des synonymes

Il est courant qu'une organisation utilise une terminologie propre ou différentes appellations pour désigner un concept ou une notion. En établissant des équivalences grâce aux synonymes, vous pouvez aider les utilisateurs à trouver l'information recherchée.

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 ?
_term chaîne Terme à définir. Utilisez de préférence des mots sans trait d'union ou des expressions sans ponctuation. Obligatoire
_synonym chaîne (récurrente) 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 ajoute la valeur de la propriété _term dans une requête, la requête réelle devient terme OU synonymes. Supposons que le terme "science fiction" soit défini avec le synonyme "SF". Une requête comprenant le mot "science fiction" renverra les éléments contenant "science fiction" ou "SF".

Les synonymes ne sont pas appliqués de manière bidirectionnelle. Ainsi, si l'utilisateur lance une requête sur "SF", Cloud Search ne prend pas de synonymes en compte. La requête ne renvoie que les éléments contenant "SF". Les éléments avec "science fiction" sont ignorés.

Pour que les deux termes soient interchangeables, vous devez les définir séparément.

Terme Synonymes
science fiction SF
SF science fiction

Pendant le traitement de la requête, les traits d'union et autres signes de ponctuation sont supprimés avant que les synonymes soient appliqués. La requête "science-fiction" correspond alors au _term "science fiction". Pour créer des synonymes pour des termes auxquels les utilisateurs sont susceptibles d'ajouter un trait d'union, normalisez d'abord le _term avec un espace au lieu d'un tiret.

Dans notre exemple, avec les définitions suivantes, les requêtes "science-fiction", "science fiction", "sciencefiction" et "SF" sont considérées comme interchangeables :

Terme Synonymes
science fiction SF, sciencefiction
sciencefiction SF, science fiction
SF science fiction, sciencefiction

Par défaut, les synonymes d'une source de données s'appliquent à l'ensemble du domaine. En effet, les applications de recherche utilisent les synonymes pour toutes les recherches, quelle que soit la source de données. Si vous souhaitez que les synonymes s'appliquent une source de données particulière, 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 Créer un connecteur de contenu.

L'extrait de code suivant permet de créer un RepositoryDoc représentant le terme et les synonymes à partir d'un 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();
}

Prenez en compte les informations suivantes lorsque vous définissez des synonymes :

  • Les synonymes saisis doivent être publics au sein du domaine. Pour ce faire, dans l'exemple précédent, vous devez 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 à une source de données

Par défaut, les synonymes sont pris en compte pour toutes les sources de données dans l'ensemble des applications de recherche. Cependant, vous pouvez regrouper des synonymes par source de données et application de recherche. Par exemple, supposons que votre organisation dispose d'équipes d'ingénierie et de ventes distinctes, et que vous souhaitiez associer à chacune une expérience de recherche différente, y compris des synonymes spécifiques à leurs postes. Dans ce cas, vous pouvez créer deux applications de recherche distinctes pour l'ingénierie et les ventes, associées à leurs propres source de données et synonymes.

Pour limiter l'application de synonymes, définissez _onlyApplicableForAttachedSearchApplications sur true lors de l'indexation. Ce paramètre limite les synonymes de sorte qu'ils soient pris en compte uniquement dans les applications de recherche incluant une source de données spécifique. Par exemple, l'ajout de la ligne de code suivante à l'exemple précédent garantit que les synonymes indexés sont spécifiques à la source de données :

structuredData.put("_onlyApplicableForAttachedSearchApplications", true);