Zdefiniuj synonimy

Często zdarza się, że organizacje używają unikalnej terminologii lub wielu sposobów na określenie pojęcia lub rzeczy. Zdefiniuj synonimy, aby określić równoważność haseł i ułatwić użytkownikom znajdowanie produktów podczas wyszukiwania.

Synonimy są definiowane przez indeksowanie elementów o dobrze znanym schemacie _dictionaryEntry.

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

Właściwość Typ Opis Wymagana?
_term string Termin do zdefiniowania. Zalecane wartości to słowa lub wyrażenia bez łączników bez znaków interpunkcyjnych. Wymagane
_synonym string (repeated) Hasła alternatywne, które mają być uwzględnione w zapytaniach pasujących do ciągu zdefiniowanego w polu _term. Wymagane
_onlyApplicableForAttachedSearchApplications boolean Umożliwia grupowanie synonimów według źródła danych i wyszukiwarki. Więcej informacji znajdziesz w artykule Definiowanie synonimów dla źródła danych. Opcjonalnie

Gdy użytkownik uwzględni w zapytaniu wartość właściwości _term, zapytanie effective zmieni się w „hasło LUB synonimy”. Jeśli np. hasło "scifi" zostało zdefiniowane za pomocą synonimu "science fiction", zapytanie zawierające słowo "scifi" zostanie dopasowane do elementów, które zawierają "scifi" lub "science fiction."

Synonimy nie są stosowane dwukierunkowo. Jeśli zamiast tego zapytanie dotyczy "science fiction,", Cloud Search nie zastosuje do niego żadnych synonimów. Zapytanie pasuje tylko do elementów zawierających "science fiction." Elementy zawierające "scifi", które zostały pominięte.

Aby wszystkie oba terminy były wymienne, zdefiniuj je oddzielnie:

Okres obowiązywania Synonimy
scifi science fiction
science fiction scifi

Podczas przetwarzania zapytań łącznik i inne znaki interpunkcyjne są usuwane przed zastosowaniem synonimów. Zapytanie użytkownika "sci-fi" pasuje do _term. "sci fi." Aby utworzyć synonimy haseł, które użytkownicy mogą dzielić, najpierw znormalizuj zakres _term tak, aby zamiast łączników użyj spacji.

Kontynuując nasz przykład, podane niżej definicje pasują do zapytań użytkowników, które traktują atrybuty "sci-fi," "sci fi," "scifi," i "science fiction" jako zamienne:

Okres obowiązywania Synonimy
scifi science fiction, sci fi
sci fi science fiction, scifi
science fiction scifi, sci fi

Domyślnie synonimy w dowolnym źródle danych mają zastosowanie w całej domenie. Synonimy są stosowane w wyszukiwarkach w przypadku wszystkich wyszukiwań niezależnie od źródła danych. Jeśli chcesz poznać synonimy dla konkretnego źródła danych, przeczytaj artykuł Definiowanie synonimów dla konkretnego źródła danych.

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

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

Ten fragment kodu pokazuje, jak utworzyć element RepositoryDoc reprezentujący hasło i synonim na podstawie rekordu 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();
}

Definiując synonimy, pamiętaj o tych kwestiach:

  • Wpisy synonimów muszą być publiczne w domenie. W poprzednim przykładzie można to zrobić przez ustawienie listy ACL na DOMAIN_PUBLIC_ACL.
  • Tych właściwości nie należy określać w pliku konfiguracji, ponieważ zastępują one w kodzie ustawienie publiczne domeny:
    • defaultAcl.mode=FALLBACK
    • defaultAcl.public=true

Zdefiniuj synonimy specyficzne dla wyszukiwarki

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

Załóżmy jednak, że w Twojej organizacji są osobne zespoły inżynierów i zespołów sprzedaży, a chcesz zapewnić każdemu z nich inny sposób wyszukiwania, w tym synonimy konkretnych stanowisk. W takim przypadku możesz utworzyć jedną wyszukiwarkę ze źródłem danych i synonimami związanymi z inżynierią oraz drugą wyszukiwarkę ze źródłem danych i synonimami dotyczącymi sprzedaży. Aby osiągnąć ten cel, zindeksuj każdy synonim w określonym źródle danych za pomocą atrybutu _onlyApplicableForAttachedSearchApplications=true. To ustawienie ogranicza synonimy, aby były stosowane tylko do wyszukiwarek zawierających określone źródło danych.

Na przykład dodanie tego wiersza kodu do poprzedniego przykładowego kodu sprawi, że zindeksowane synonimy będą dostosowane do źródła danych:

structuredData.put("_onlyApplicableForAttachedSearchApplications", true);