Zdefiniuj synonimy

Organizacje często mają unikalną terminologię lub wiele sposobów odniesienia do określonego koncepcji lub rzeczy. Utwórz synonimy, aby zapewnić równoważność haseł i ułatwić użytkownikom znajdowanie elementów podczas wyszukiwania.

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 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) Alternatywne hasła, które mają być uwzględniane w zapytaniach pasujących do ciągu znaków zdefiniowanego w zasadzie _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

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

Synonimy nie są stosowane dwukierunkowo. Jeśli 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".

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

Termin 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 mogą być łączone przez użytkowników, najpierw znormalizuj element _term, tak aby używał spacji zamiast łączników.

W tym przykładzie do zapytań użytkowników traktują "sci-fi," "sci fi," "scifi," i "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 mają zastosowanie w całej domenie. Synonimy są stosowane w przypadku wszystkich wyszukiwań niezależnie od źródła danych. Jeśli potrzebujesz synonimów specyficznych dla źródła danych, przeczytaj artykuł Definiowanie synonimów dla źródła danych.

Definiowanie globalnych synonimów przy użyciu pakietu SDK Cloud Search

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

Ten fragment kodu pokazuje tworzenie elementu RepositoryDoc reprezentującego 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();
}

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

  • Wpisy synonimów muszą być publiczne. W poprzednim przykładzie można to zrobić, ustawiając listę kontroli dostępu (ACL) na DOMAIN_PUBLIC_ACL.
  • W pliku konfiguracji nie należy zdefiniować tych właściwości, ponieważ zastępują one ustawienie publiczne domeny w kodzie:
    • defaultAcl.mode=FALLBACK
    • defaultAcl.public=true

Definiowanie synonimów specyficznych dla aplikacji do wyszukiwania

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

Załóżmy jednak, że w Twojej organizacji są oddzielne zespoły inżynierów i zespoły sprzedaży oraz chcesz zapewnić każdemu z nich inne możliwości wyszukiwania, w tym synonimy konkretnych stanowisk. W tym przypadku możesz utworzyć jedną aplikację wyszukiwania ze źródłem danych i synonimami specyficzną dla branży inżynieryjnej, a drugą ze źródłem danych i synonimami związanymi ze sprzedażą. Aby osiągnąć ten cel, zindeksuj każdy synonimy w określonym źródle danych za pomocą funkcji _onlyApplicableForAttachedSearchApplications=true. To ustawienie ogranicza synonimy, aby były stosowane tylko do aplikacji do wyszukiwania, które zawierają określone źródło danych.

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

structuredData.put("_onlyApplicableForAttachedSearchApplications", true);