Definir sinónimos

Es habitual que una organización tenga una terminología única o varias formas de referirse a un concepto o un objeto. Para ayudar a los usuarios a encontrar elementos durante las búsquedas, deberías definir sinónimos que establezcan equivalencias entre varios términos.

Los sinónimos se definen indexando elementos con el esquema _dictionaryEntry, que se usa con mucha frecuencia.

Los elementos de tipo _dictionaryEntry necesitan dos propiedades:

Propiedad Tipo Descripción
_term cadena El término que se va a definir. Los valores recomendados son palabras sin guiones y frases sin puntuación.
_synonym cadena (repetida) Términos alternativos que se incluirán en las consultas que coincidan con la cadena definida en _term.

Cuando un usuario incluye el valor de la propiedad _term en una consulta, la consulta real pasa a ser de término O sinónimos. Por ejemplo, si el término scifi se define con el sinónimo ciencia ficción, entonces una consulta que contenga la palabra scifi coincidirá con los elementos que contengan scifi o ciencia ficción.

Los sinónimos no se aplican bidireccionalmente. Si la consulta es, por el contrario, ciencia ficción, Cloud Search no aplicará ningún sinónimo a la consulta y esta solo coincidirá con elementos que contengan ciencia ficción, mientras que los elementos que contengan scifi se omitirán.

Para que los dos términos sean intercambiables, define cada uno por separado.

Término Sinónimos
scifi ciencia ficción
ciencia ficción scifi

Durante el procesamiento de consultas, los guiones y los signos de puntuación se eliminan antes de aplicar los sinónimos. La consulta del usuario sci-fi coincide con _term sci fi. Para crear sinónimos de términos que los usuarios hayan podido separar con guion, primero normaliza _term de forma que use espacios en blanco en lugar de guiones.

Si continuamos con el ejemplo, en las siguientes coincidencias de definiciones, las consultas de los usuarios tratan sci-fi, sci fi, scifi y ciencia ficción como intercambiables:

Término Sinónimos
scifi ciencia ficción, sci fi
sci fi ciencia ficción, scifi
ciencia ficción scifi, sci fi

Definir un término y sinónimos con el SDK Content Connector

Puedes usar el SDK Content Connector si quieres definir términos y sus sinónimos. Para obtener instrucciones, consulta el capítulo Crear un conector de contenido.

En el siguiente fragmento de código se muestra cómo crear un RepositoryDoc que represente el término y el sinónimo según un registro de un archivo 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();
}