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 nécessitent deux propriétés :

Propriété Type Description
_term chaîne Terme à définir. Utilisez de préférence des mots sans trait d'union ou des expressions sans ponctuation.
_synonym chaîne (récurrente) Autres termes à inclure dans les requêtes correspondant à la chaîne définie dans _term.

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 contenant 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 n'applique aucun synonyme. 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, le trait d'union et les autres signes de ponctuation sont supprimés avant que les synonymes soient appliqués. La requête science-fiction correspond alors à _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 la forme avec espaces comme terme (_term).

En reprenant l'exemple, avec les définitions suivantes, science-fiction, science fiction, sciencefiction et SF sont considérés comme interchangeables :

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

Définir un terme et des synonymes avec le SDK Content Connector

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 permet de créer un objet 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);

  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)
      .build();

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