Definir sinônimos

É comum que uma organização tenha uma terminologia exclusiva ou várias maneiras de se referir a um conceito ou objeto. É necessário definir os sinônimos para estabelecer a equivalência de termos e ajudar os usuários a localizar os itens na realização de pesquisas.

Sinônimos são definidos por meio da indexação de itens com o esquema conhecido _dictionaryEntry.

Itens do tipo _dictionaryEntry podem ter as seguintes propriedades:

Propriedade Tipo Descrição Obrigatório?
_term string O termo a ser definido. Os valores recomendados são palavras não hifenizadas ou frases sem pontuação. Obrigatório
_synonym string (repeated) Termos alternativos a serem incluídos em consultas que correspondem à string definida em _term. Obrigatório
_onlyApplicableForAttachedSearchApplications boolean Permite agrupar sinônimos por fonte de dados e app de pesquisa. Para mais informações, consulte Definir sinônimos específicos da fonte de dados. Opcional

Quando um usuário inclui o valor da propriedade _term em uma consulta, a consulta efetiva se torna "termo OR sinônimos". Por exemplo, se o termo "scifi" for definido com o sinônimo "science fiction", uma consulta contendo a palavra "scifi" corresponderá a itens que contêm "scifi" ou "science fiction."

Os sinônimos não são aplicados de modo bidirecional. Se, em vez disso, a consulta for por "science fiction,", o Cloud Search não aplicará sinônimos a ela. A consulta corresponde apenas a itens que contêm "science fiction.". Os itens que contêm "scifi" são omitidos.

Para tornar todos os termos intercambiáveis, defina cada termo separadamente:

Termo Sinônimos
scifi science fiction
science fiction scifi

Durante o processamento da consulta, os hifens e outras pontuações são removidos antes da aplicação de sinônimos. A consulta do usuário "sci-fi" corresponde a _term "sci fi.". Para criar sinônimos para termos que podem ser hifenizados pelos usuários, primeiro normalize o _term para usar espaços em branco em vez de hifens.

Continuando com o exemplo, as definições a seguir correspondem às consultas do usuário que tratam "sci-fi," "sci fi," "scifi," e "science fiction" como intercambiáveis:

Termo Sinônimos
scifi science fiction, sci fi
sci fi science fiction, scifi
science fiction scifi, sci fi

Por padrão, os sinônimos em qualquer fonte de dados se aplicam a um domínio inteiro. Especificamente, os sinônimos são aplicados a todas as pesquisas em apps de pesquisa, independentemente da origem de dados. Se você quiser sinônimos específicos da fonte de dados, consulte o artigo Definir sinônimos específicos da fonte de dados.

Definir sinônimos globais usando o SDK do Cloud Search

É possível usar o SDK do Content Connector para definir termos e sinônimos. Consulte Criar um conector de conteúdo para instruções sobre como criar um conector.

O snippet a seguir ilustra a criação de um RepositoryDoc que representa o termo e o sinônimo com base em um registro de arquivo 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();
}

Observe o seguinte ao definir sinônimos:

  • As entradas de sinônimo precisam ser de domínio público. No exemplo anterior, isso é feito ao configurar a lista de controle de acesso (ACL, na sigla em inglês) como DOMAIN_PUBLIC_ACL.
  • As seguintes propriedades não devem ser definidas para o arquivo de configuração porque substituem a configuração de domínio público no código:
    • defaultAcl.mode=FALLBACK
    • defaultAcl.public=true

Definir sinônimos específicos do aplicativo de pesquisa

Por padrão, os sinônimos são aplicados a todas as fontes de dados em todos os aplicativos de pesquisa.

No entanto, suponha que sua organização tenha equipes de engenharia e vendas separadas e você queira fornecer a cada equipe uma experiência de pesquisa diferente, incluindo sinônimos específicos da função. Nesse caso, você pode criar um aplicativo de pesquisa com sinônimos e uma fonte de dados específica de engenharia e outro aplicativo de pesquisa com sinônimos e uma fonte de dados específica para vendas. Para alcançar esse objetivo, indexe cada sinônimo em uma fonte de dados específica usando _onlyApplicableForAttachedSearchApplications=true. Essa configuração limita os sinônimos, de modo que sejam aplicados apenas a aplicativos de pesquisa que incluem uma fonte de dados específica.

Por exemplo, adicionar a linha de código abaixo ao exemplo de código anterior garante que os sinônimos indexados sejam específicos da fonte de dados:

structuredData.put("_onlyApplicableForAttachedSearchApplications", true);