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 pela indexação de itens com o _dictionaryEntry conhecido esquema.

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 o termo "scifi" é definido com o sinônimo "science fiction", depois uma consulta contendo a palavra "scifi" corresponde a itens que contêm "scifi" ou "science fiction."

Os sinônimos não são aplicados de modo bidirecional. Se a consulta for para "science fiction," Cloud Search não aplica sinônimos à consulta. A consulta só corresponde a itens que contêm "science fiction." itens contendo "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, a hifenização e outras pontuações são removidas antes até aplicar 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 nos aplicativos de pesquisa para todas as pesquisas seja qual for a fonte. Se quiser sinônimos específicos da fonte de dados, consulte para 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.
  • As seguintes propriedades não devem ser definidas para seu arquivo de configuração porque eles 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 toda a pesquisa aplicativos conteinerizados.

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

Por exemplo, adicionar o a seguinte linha de código para o exemplo de código anterior garante que os sinônimos indexados são específicos da fonte de dados:

structuredData.put("_onlyApplicableForAttachedSearchApplications", true);