Synonyme definieren

Es ist normal, dass eine Organisation eine eindeutige Terminologie oder mehrere Möglichkeiten hat, auf ein Konzept oder eine Sache zu verweisen. Definieren Sie Synonyme, um die Äquivalenz von Begriffen festzulegen, damit Nutzer Elemente bei der Suche leichter finden.

Wenn Sie Synonyme definieren möchten, werden Elemente mit dem bekannten Schema _dictionaryEntry indexiert.

Elemente des Typs _dictionaryEntry können die folgenden Eigenschaften haben:

Attribut Typ Beschreibung Erforderlich?
_term string Der zu definierende Begriff. Empfohlene Werte sind Wörter ohne Bindestrich oder Wortgruppen ohne Satzzeichen. Erforderlich
_synonym string (repeated) Alternative Begriffe, die in Abfragen eingeschlossen werden sollen, die dem in _term definierten String entsprechen. Erforderlich
_onlyApplicableForAttachedSearchApplications boolean Damit können Sie Synonyme nach Datenquelle und Suchanwendung gruppieren. Weitere Informationen finden Sie unter Synonyme für bestimmte Datenquellen definieren. Optional

Nimmt ein Nutzer den Wert des Attributs _term in eine Abfrage auf, wird die effektive Abfrage zu term OR Synonym. Wenn beispielsweise der Begriff "scifi" mit dem Synonym "science fiction" definiert ist, stimmt eine Abfrage mit dem Wort "scifi" mit Elementen überein, die entweder "scifi" oder "science fiction." enthalten.

Synonyme werden nicht bidirektional angewendet. Wenn die Abfrage stattdessen "science fiction," ist, wendet Cloud Search keine Synonyme auf die Abfrage an. Die Abfrage stimmt nur mit Elementen überein, die "science fiction." enthalten. Elemente mit "scifi" werden ausgelassen.

Damit alle beiden Begriffe austauschbar sind, definieren Sie die einzelnen Begriffe separat:

Laufzeit Synonym
scifi science fiction
science fiction scifi

Bei der Verarbeitung einer Abfrage werden Bindestriche und andere Satzzeichen entfernt, bevor Synonyme angewendet werden. Die Nutzerabfrage "sci-fi" stimmt mit dem _term "sci fi." überein. Um Synonyme für Begriffe zu erstellen, die von Nutzern mit Bindestrich geschrieben werden können, müssen Sie zuerst das _term so konfigurieren, dass Leerzeichen anstelle von Bindestrichen verwendet werden.

Um das Beispiel weiterzuführen, entsprechen die folgenden Definitionen den Nutzerabfragen, die "sci-fi," "sci fi," "scifi," und "science fiction" als austauschbar behandeln:

Laufzeit Synonym
scifi science fiction, sci fi
sci fi science fiction, scifi
science fiction scifi, sci fi

Standardmäßig gelten Synonyme in jeder Datenquelle für die gesamte Domain. Insbesondere werden Synonyme für alle Suchanfragen unabhängig von der Datenquelle auf alle Suchanwendungen angewendet. Wie Sie Synonyme für die jeweilige Datenquelle verwenden, erfahren Sie unter Synonyme für bestimmte Datenquellen definieren.

Globale Synonyme mit dem Cloud Search SDK definieren

Mit dem Content Connector SDK können Sie Begriffe und ihre Synonyme definieren. Eine Anleitung dazu finden Sie unter Inhaltsconnectors erstellen.

Das folgende Snippet zeigt, wie ein RepositoryDoc erstellt wird, in dem der Begriff und sein Synonym auf Grundlage eines Eintrags in einer CSV-Datei dargestellt sind:

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();
}

Beachten Sie beim Definieren von Synonymen Folgendes:

  • Synonymeinträge müssen „domain public“ sein. Im vorherigen Beispiel wird die ACL auf DOMAIN_PUBLIC_ACL gesetzt.
  • Die folgenden Attribute sollten nicht für Ihre Konfigurationsdatei definiert werden, da sie die Einstellung „domain public“ in Ihrem Code überschreiben:
    • defaultAcl.mode=FALLBACK
    • defaultAcl.public=true

Anwendungsspezifische Synonyme für die Suche definieren

Standardmäßig werden Synonyme auf alle Datenquellen in allen Suchanwendungen angewendet.

Angenommen, Ihre Organisation hat jedoch separate Engineering- und Vertriebsteams und Sie möchten jedem Team eine andere Sucherfahrung bieten, einschließlich berufstätiger Synonyme. In diesem Fall könnten Sie eine Suchanwendung mit einer entwicklerspezifischen Datenquelle und Synonymen und eine andere mit einer vertriebsspezifischen Datenquelle und Synonymen erstellen. Dazu indexieren Sie jedes Synonym mit _onlyApplicableForAttachedSearchApplications=true in einer bestimmten Datenquelle. Mit dieser Einstellung werden die Synonyme so eingeschränkt, dass sie nur auf Suchanwendungen angewendet werden, die eine bestimmte Datenquelle enthalten.

Wenn Sie beispielsweise dem vorherigen Codebeispiel die folgende Codezeile hinzufügen, sind die indexierten Synonyme datenquellenspezifisch:

structuredData.put("_onlyApplicableForAttachedSearchApplications", true);