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 nas consultas que correspondem à string definida em _term. Obrigatório
_onlyApplicableForAttachedSearchApplications boolean Permite agrupar sinônimos por fonte de dados e aplicativo 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 eficaz se torna "termo OU sinônimos". Por exemplo, se o termo "scifi" for definido com o sinônimo "science fiction", uma consulta que contenha a palavra "scifi" vai corresponder a itens que contenham "scifi" ou "science fiction.".

Os sinônimos não são aplicados de modo bidirecional. Se, em vez do exemplo anterior, a consulta for por "science fiction,", o Cloud Search não vai 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 fazer com que todos os termos sejam intercambiáveis, defina cada um deles 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 ao _term "sci fi." Para criar sinônimos para termos que podem ser hifenizados pelos usuários, primeiro normalize o _term para que use 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 são aplicados em todo o domínio. Especificamente, os sinônimos são aplicados em apps de pesquisa para todas as pesquisas, independente da fonte de dados. Se você 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 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.
  • Não defina as propriedades a seguir para o arquivo de configuração, porque elas modificam a configuração de domínio público do 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 origens 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, você pode criar um aplicativo de pesquisa com uma fonte de dados e sinônimos específicos de engenharia e outro com uma fonte de dados e sinônimos específicos de 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 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 ao exemplo anterior garante que os sinônimos indexados sejam específicos da origem de dados:

structuredData.put("_onlyApplicableForAttachedSearchApplications", true);