Define sinónimos

Es común que una organización tenga terminología única o varias maneras de referirse a un concepto o a un objeto. Debes definir sinónimos para establecer la equivalencia de términos a fin de ayudar a los usuarios a encontrar elementos en una búsqueda.

Los sinónimos se definen mediante elementos de índice con el esquema conocido de _dictionaryEntry.

Los elementos de tipo _dictionaryEntry pueden tener las siguientes propiedades:

Propiedad Tipo Descripción ¿Obligatorio?
_term string El término que se desea definir. Los valores recomendados son palabras sin guiones o frases sin puntuación. Obligatorio
_synonym string (repeated) Son los términos alternativos que se incluirán en las consultas que coincidan con la cadena definida en _term. Obligatorio
_onlyApplicableForAttachedSearchApplications boolean Te permite agrupar sinónimos por fuente de datos y aplicación de búsqueda. Para obtener más información, consulta Define sinónimos específicos de la fuente de datos. Opcional

Cuando un usuario incluye el valor de la propiedad _term en una consulta, la consulta efectiva se convierte en "término O sinónimos". Por ejemplo, si el término "scifi" se define con el sinónimo "science fiction", una consulta que contiene la palabra "scifi" coincide con los elementos que contienen "scifi" o "science fiction.".

Los sinónimos no se aplican de manera bidireccional. Es decir, si la consulta es para "science fiction,", Cloud Search no aplica ningún sinónimo a la consulta. La consulta solo hace coincidir los elementos que contienen "science fiction.". Se omiten los elementos que contienen "scifi".

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

Término Sinónimos
scifi science fiction
science fiction scifi

Durante el proceso de consulta, la separación de palabras y otros tipos de puntuación se quitan antes de aplicar los sinónimos. La búsqueda del usuario "sci-fi" coincide con _term "sci fi." Para crear sinónimos para términos a los que los usuarios separaron con guiones, primero normaliza _term para usar espacios en blanco en lugar de guiones.

Para seguir con el ejemplo anterior, las siguientes definiciones que coinciden con las consultas del usuario tratan a "sci-fi," "sci fi," "scifi," y "science fiction" como intercambiables:

Término Sinónimos
scifi science fiction, sci fi
sci fi science fiction, scifi
science fiction scifi, sci fi

De forma predeterminada, los sinónimos de cualquier fuente de datos se aplican a todo un dominio. Específicamente, los sinónimos se aplican a todas las aplicaciones de búsqueda para todas las búsquedas, independientemente de la fuente de datos. Si deseas obtener sinónimos específicos de la fuente de datos, consulta Cómo definir sinónimos específicos de la fuente de datos.

Define sinónimos globales con el SDK de Cloud Search

Puedes usar el conector de contenido de SDK para definir los términos y sus sinónimos. Consulta Crea un conector de contenido a fin de obtener instrucciones para compilar un conector.

En el siguiente fragmento, se ilustra la compilación de un RepositoryDoc que representa el término y el sinónimo según un registro de 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);

  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();
}

Ten en cuenta lo siguiente cuando definas sinónimos:

  • Las entradas de sinónimos tienen que ser de dominio público. En el ejemplo anterior, eso se logra mediante la configuración de la LCA en DOMAIN_PUBLIC_ACL.
  • Las siguientes propiedades no deben definirse para el archivo de configuración debido a que anulan la configuración pública del dominio en tu código:
    • defaultAcl.mode=FALLBACK
    • defaultAcl.public=true

Define sinónimos específicos de la aplicación de búsqueda

De forma predeterminada, los sinónimos se aplican a todas las fuentes de datos en todas las aplicaciones de búsqueda.

Sin embargo, supongamos que tu organización tiene equipos de ingeniería y ventas independientes, y deseas proporcionarles a cada equipo una experiencia de búsqueda diferente, incluidos sinónimos específicos de los puestos de trabajo. En este caso, puedes crear una aplicación de búsqueda con sinónimos y una fuente de datos específicos de Ingeniería, y otra aplicación de búsqueda con sinónimos y una fuente de datos específicos de Ventas. Para lograr este objetivo, indexa cada sinónimo en una fuente de datos específica con _onlyApplicableForAttachedSearchApplications=true. Esta configuración limita los sinónimos de modo que solo se apliquen a las aplicaciones de búsqueda que incluyen una fuente de datos específica.

Por ejemplo, agregar la siguiente línea de código al ejemplo de código anterior garantiza que los sinónimos indexados sean específicos de la fuente de datos:

structuredData.put("_onlyApplicableForAttachedSearchApplications", true);