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 indexando 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 nas 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 com a palavra "scifi" corresponderá aos 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á nenhum sinônimo a ela. A consulta corresponde apenas a itens com "science fiction.". Os itens com "scifi" são omitidos.

Para tornar todos os dois termos intercambiáveis, defina cada um deles separadamente:

Termo Sinônimos
scifi science fiction
science fiction scifi

Durante o processamento da consulta, hifenização e outras pontuações são removidas 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 abaixo 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 nos apps de pesquisa para todas as pesquisas, independentemente da origem de dados. Se quiser sinônimos específicos da fonte de dados, consulte 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 uma 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.
  • Não defina as propriedades a seguir no arquivo de configuração porque elas 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 apps de pesquisa.

No entanto, suponha que sua organização tenha equipes separadas de engenharia e vendas e você queira fornecer a cada equipe uma experiência de pesquisa diferente, incluindo sinônimos específicos da função. Nesse caso, é possível criar um app de pesquisa com uma fonte de dados e sinônimos específicos de engenharia e outro app de pesquisa com uma fonte de dados e sinônimos específicos de vendas. Para atingir essa meta, indexe cada sinônimo em uma fonte de dados específica usando _onlyApplicableForAttachedSearchApplications=true. Essa configuração limita os sinônimos para que eles sejam aplicados somente a aplicativos de pesquisa que incluem uma fonte de dados específica.

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

structuredData.put("_onlyApplicableForAttachedSearchApplications", true);