Zdefiniuj synonimy

Często organizacje mają własną terminologię lub wiele sposobów odwoływania się do danego pojęcia lub obiektu. Powinieneś zdefiniować synonimy, aby ustalić równoważność terminów i ułatwić użytkownikom znajdowanie produktów podczas wyszukiwania.

Synonimy są definiowane przez indeksowanie elementów za pomocą 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 słowa lub wyrażenia bez łącznika i znaków interpunkcyjnych. Wymagane
_synonym string (repeated) Alternatywne słowa, które mają być uwzględniane w zapytaniach pasujących do ciągu znaków zdefiniowanego w _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 specyficznych dla źródła danych. Opcjonalny

Gdy użytkownik uwzględni w zapytaniu wartość właściwości _term, efektywne zapytanie będzie miało postać „termin LUB synonimy”. Jeśli np. termin "scifi" jest zdefiniowany z synonimem "science fiction", zapytanie zawierające słowo "scifi" będzie pasować do elementów zawierających "scifi" lub "science fiction.".

Synonimy nie są stosowane dwukierunkowo. Jeśli zapytanie dotyczy "science fiction,"Cloud Search"science fiction,", usługa 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 każdy z nich osobno:

Termin Synonimy
scifi science fiction
science fiction scifi

Podczas przetwarzania zapytania myślniki i inne znaki interpunkcyjne są usuwane przed zastosowaniem synonimów. Zapytanie użytkownika "sci-fi" pasuje do _term "sci fi." Aby utworzyć synonimy terminów, które użytkownicy mogą pisać z łącznikiem, najpierw znormalizuj _term, aby zamiast łączników używać spacji.

W tym przykładzie definicje pasujące do zapytań użytkownika traktują słowa treat"sci-fi," "sci fi," "scifi,""science fiction" jako wymienne:

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 do wyszukiwania w przypadku wszystkich wyszukiwań, niezależnie od źródła danych. Jeśli chcesz używać synonimów specyficznych dla źródła danych, zapoznaj się z sekcją Definiowanie synonimów specyficznych dla źródła danych.

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

Za pomocą pakietu SDK łącznika treści możesz definiować terminy i ich synonimy. Instrukcje tworzenia łącznika znajdziesz w artykule Tworzenie łącznika treści.

Poniższy fragment kodu pokazuje, jak utworzyć obiekt RepositoryDoc reprezentujący termin 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();
}

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

  • Synonimy muszą być publiczne w domenie. W poprzednim przykładzie osiągnięto to przez ustawienie listy ACL na DOMAIN_PUBLIC_ACL.
  • W pliku konfiguracyjnym nie należy definiować tych właściwości, ponieważ zastępują one publiczne ustawienie domeny w kodzie:
    • defaultAcl.mode=FALLBACK
    • defaultAcl.public=true

Określanie synonimów dla wyszukiwarki

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

Załóżmy jednak, że w Twojej organizacji są osobne zespoły inżynierów i sprzedaży, a Ty chcesz zapewnić każdemu z nich inne środowisko wyszukiwania, w tym synonimy specyficzne dla stanowiska. W takim przypadku możesz utworzyć jedną wyszukiwarkę ze źródłem danych i synonimami dotyczącymi inżynierii, a drugą – ze źródłem danych i synonimami dotyczącymi sprzedaży. Aby to osiągnąć, zindeksuj każdy synonim w określonym źródle danych za pomocą _onlyApplicableForAttachedSearchApplications=true. To ustawienie ogranicza synonimy tak, aby były stosowane tylko w aplikacjach wyszukiwania, które zawierają określone źródło danych.

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

structuredData.put("_onlyApplicableForAttachedSearchApplications", true);