Definisci i sinonimi

Capita spesso che un'organizzazione utilizzi una terminologia unica o più modi per fare riferimento a un concetto o a una cosa. Devi definire dei sinonimi per stabilire l'equivalenza dei termini e consentire così agli utenti di trovare gli articoli durante la ricerca.

I sinonimi vengono definiti mediante l'indicizzazione degli elementi con il noto schema _dictionaryEntry.

Gli elementi di tipo _dictionaryEntry possono avere le seguenti proprietà:

Proprietà Tipo Descrizione Campo obbligatorio?
_term string Il termine da definire. I valori consigliati sono parole o frasi senza trattino e prive di punteggiatura. Obbligatorio
_synonym string (repeated) Termini alternativi da includere nelle query corrispondenti alla stringa definita in _term. Obbligatorio
_onlyApplicableForAttachedSearchApplications boolean Consente di raggruppare i sinonimi per origine dati e applicazione di ricerca. Per saperne di più, consulta Definire sinonimi specifici dell'origine dati. Facoltativo

Quando un utente include il valore della proprietà _term in una query, la query efficace diventa "termine OR sinonimi". Ad esempio, se il termine "scifi" viene definito con il sinonimo "science fiction", una query contenente la parola "scifi" corrisponde a elementi che contengono "scifi" o "science fiction."

I sinonimi non vengono applicati in modo bidirezionale. Se la query riguarda invece "science fiction,", Cloud Search non applica sinonimi alla query. La query corrisponde solo agli elementi che contengono "science fiction." Gli elementi che contengono "scifi" vengono omessi.

Per rendere intercambiabili entrambi i termini, definisci ciascun termine separatamente:

Termine Sinonimi
scifi science fiction
science fiction scifi

Durante l'elaborazione delle query, i trattini e altri segni di punteggiatura vengono rimossi prima dell'applicazione dei sinonimi. La query dell'utente "sci-fi" corrisponde a _term "sci fi." Per creare sinonimi per termini a cui gli utenti potrebbero applicare un trattino, normalizza innanzitutto _term in modo che utilizzi spazi vuoti anziché trattini.

Proseguendo con l'esempio, le seguenti definizioni corrispondono alle query dell'utente considerano "sci-fi," "sci fi," "scifi," e "science fiction" come intercambiabili:

Termine Sinonimi
scifi science fiction, sci fi
sci fi science fiction, scifi
science fiction scifi, sci fi

Per impostazione predefinita, i sinonimi in qualsiasi origine dati vengono applicati all'intero dominio. In particolare, i sinonimi vengono applicati alle applicazioni di ricerca per tutte le ricerche, indipendentemente dall'origine dati. Se vuoi usare sinonimi specifici per origine dati, consulta Definire sinonimi specifici per origine dati.

Definire i sinonimi globali utilizzando l'SDK di Cloud Search

Puoi utilizzare l'SDK Content Connector per definire i termini e i relativi sinonimi. Per le istruzioni sulla creazione di un connettore, consulta Creare un connettore di contenuti.

Lo snippet seguente illustra la creazione di una RepositoryDoc che rappresenta il termine e un sinonimo in base a un record di file 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();
}

Tieni presente quanto segue quando definisci i sinonimi:

  • Le voci con i simboli devono essere pubbliche come dominio. Nell'esempio precedente, questo si ottiene impostando l'ACL su DOMAIN_PUBLIC_ACL.
  • Le seguenti proprietà non devono essere definite per il file di configurazione perché sostituiscono l'impostazione relativa al dominio pubblico nel codice:
    • defaultAcl.mode=FALLBACK
    • defaultAcl.public=true

Definire i sinonimi specifici per l'applicazione di ricerca

Per impostazione predefinita, i sinonimi vengono applicati a tutte le origini dati in tutte le applicazioni di ricerca.

Tuttavia, supponiamo che la tua organizzazione abbia team di vendita e di progettazione separati e che tu voglia fornire a ogni team un'esperienza di ricerca diversa, inclusi sinonimi specifici del ruolo lavorativo. In questo caso, potresti creare un'applicazione di ricerca con un'origine dati e dei sinonimi specifici per l'ingegneria e un'altra applicazione di ricerca con un'origine dati e dei sinonimi specifici per le vendite. Per raggiungere questo obiettivo, indicizza ogni sinonimo in un'origine dati specifica utilizzando _onlyApplicableForAttachedSearchApplications=true. Questa impostazione limita i sinonimi in modo che vengano applicati solo alle applicazioni di ricerca che includono un'origine dati specifica.

Ad esempio, l'aggiunta della seguente riga di codice all'esempio di codice precedente garantisce che i sinonimi indicizzati siano specifici dell'origine dati:

structuredData.put("_onlyApplicableForAttachedSearchApplications", true);