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 requieren dos propiedades:

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

Cuando un usuario incluye el valor de la propiedad _term en una consulta, la consulta real se convierte en “término O sinónimos”. Por ejemplo, si el término “scifi” se define con el sinónimo “science fiction”, entonces, una consulta que contenga la palabra “scifi” coincidirá con los elementos que contengan “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 aplicará ningún sinónimo a la consulta. La consulta solo hace coincidir los elementos que contienen “science fiction”. A su vez, se omitirán los elementos que contienen “scifi”.

Para hacer que los términos sean intercambiables, debes definir 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 consulta de usuario sci-fi coincide con el _term sci fi. A fin de crear sinónimos para términos a los que los usuarios separaron con guiones, primero debes normalizar el _term y, luego, usar espacios en blanco, en vez de guiones.

Para seguir con el ejemplo anterior, las definiciones siguientes 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

Define un término y sinónimos con el conector de contenido de SDK

Puedes usar el conector de contenido de SDK para definir los términos y sus sinónimos. Consulta la sección sobre cómo crear un conector de contenido a fin de obtener instrucciones para compilar un conector.

En el fragmento siguiente, 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);

      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 propiedades siguientes no deben definirse para el archivo de configuración debido a que anularán la configuración pública del dominio en tu código:
    • defaultAcl.mode=FALLBACK
    • defaultAcl.public=true