Zdefiniuj synonimy

Organizacja może używać unikalnej terminologii lub wielu sposobów na odniesienie się do pojęcia lub rzeczy. Aby ułatwić użytkownikom znajdowanie produktów podczas wyszukiwania, zdefiniuj synonimy, które pozwolą na ustalenie równoważności terminów.

Synonimy są definiowane przez indeksowanie elementów za pomocą dobrze znanego schematu _dictionaryEntry.

Elementy typu _dictionaryEntry mogą mieć te właściwości:

Właściwość Typ Opis Wymagany?
_term string Termin do zdefiniowania. Zalecane wartości to nieprzerwane słowa lub wyrażenia bez znaków przestankowych. Wymagane
_synonym string (repeated) Alternatywne hasła, które mają być uwzględniane w zapytaniach pasujących do ciągu zdefiniowanego w sekcji _term. Wymagane
_onlyApplicableForAttachedSearchApplications boolean Umożliwia grupowanie synonimów według źródła danych i aplikacji wyszukiwania. Więcej informacji znajdziesz w artykule Definiowanie synonimów dla poszczególnych źródeł danych. Opcjonalny

Gdy użytkownik uwzględni w zapytaniu wartość właściwości _term, zapytanie skuteczne będzie brzmiało „wyrażenie OR synonimy”. Jeśli na przykład termin "scifi" jest zdefiniowany jako synonim "science fiction", zapytanie zawierające słowo "scifi" pasuje do elementów zawierających albo "scifi", albo "science fiction.".

Synonimy nie są stosowane dwukierunkowo. Jeśli zapytanie jest przeznaczone dla "science fiction," Cloud Search, nie stosuje do niego żadnych synonimów. Zapytanie pasuje tylko do elementów zawierających "science fiction.". Elementy zawierające "scifi" są pomijane.

Aby oba terminy były wymienne, zdefiniuj je osobno:

Termin Synonimy
scifi science fiction
science fiction scifi

Podczas przetwarzania zapytania przed zastosowaniem synonimów usuwane są znaki podziału wyrazów i inne znaki interpunkcyjne. Zapytanie użytkownika "sci-fi"pasuje do _term "sci fi."Aby utworzyć synonimy terminów, które mogą być łączone przez użytkowników za pomocą łącznika, najpierw znormalizuj _term, aby używać spacji zamiast łączników.

W tym przykładzie zapytania użytkownika, w których "sci-fi," "sci fi," "scifi,""science fiction" są traktowane jako wymienne, mają następujące definicje:

Termin Synonimy
scifi science fiction, sci fi
sci fi science fiction, scifi
science fiction scifi, sci fi

Domyślnie synonimy w dowolnym źródle danych są stosowane w całej domenie. Synonimy są stosowane we wszystkich aplikacjach wyszukiwania we wszystkich wyszukiwaniach niezależnie od źródła danych. Jeśli chcesz utworzyć synonimy dla konkretnego źródła danych, zapoznaj się z artykułem Definiowanie synonimów dla konkretnego źródła danych.

Definiowanie synonimów globalnych za pomocą pakietu SDK Cloud Search

Za pomocą pakietu SDK Content Connector możesz definiować terminy i ich synonimy. Instrukcje tworzenia oprogramowania sprzęgającego znajdziesz w artykule Tworzenie oprogramowania sprzęgającego treści.

Poniższy fragment kodu ilustruje tworzenie parametru RepositoryDoc reprezentującego termin i synonim na podstawie rekordu w pliku 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();
}

Podczas definiowania synonimów pamiętaj o tych kwestiach:

  • Wpisy synonimów muszą być dostępne publicznie w domenie. W poprzednim przykładzie jest to osiągane przez ustawienie uprawnień ACL na DOMAIN_PUBLIC_ACL.
  • W pliku konfiguracji nie należy definiować tych właściwości, ponieważ zastępują one ustawienie publiczne domeny w Twoim kodzie:
    • defaultAcl.mode=FALLBACK
    • defaultAcl.public=true

Definiowanie synonimów w wyszukiwarce

Domyślnie synonimy są stosowane do wszystkich źródeł danych we wszystkich aplikacjach wyszukiwania.

Załóżmy jednak, że Twoja organizacja ma oddzielne zespoły inżynierów i sprzedaży, a Ty chcesz zapewnić każdemu z nich inne możliwości wyszukiwania, w tym synonimy związane z ich rolami. W takim przypadku możesz utworzyć jedną wyszukiwarkę z synonimami i źródłem danych dla zespołu inżynierów oraz drugą wyszukiwarkę z synonimami i źródłem danych dla zespołu sprzedaży. Aby to osiągnąć, posortuj każdy synonim w konkretnym źródle danych za pomocą elementu _onlyApplicableForAttachedSearchApplications=true. To ustawienie ogranicza synonimy tak, aby były stosowane tylko w przypadku aplikacji wyszukiwania, które zawierają określone źródło danych.

Na przykład dodanie do poprzedniego przykładu kodu tego wiersza kodu zapewnia, że powiązane z indeksem synonimy są powiązane z konkretną źródłem danych:

structuredData.put("_onlyApplicableForAttachedSearchApplications", true);