Synonyme definieren

Es ist normal, dass eine Organisation eine eindeutige Terminologie oder mehrere Möglichkeiten hat, auf ein Konzept oder eine Sache zu verweisen. Sie sollten Nutzer bei der Suche unterstützen, indem Sie Synonyme festlegen, also Begriffe, die austauschbar verwendet werden können.

Wenn Sie Synonyme definieren wollen, lassen Sie Elemente mit dem bekannten Schema _dictionaryEntry indexieren.

Elemente vom Typ _dictionaryEntry können die folgenden Attribute haben:

Attribut Typ Beschreibung Erforderlich?
_term string Der zu definierende Begriff. Empfohlene Werte sind Wörter ohne Bindestriche oder Wortgruppen ohne Interpunktion. Erforderlich
_synonym string (repeated) Alternative Begriffe, die in Abfragen eingeschlossen werden sollen, die mit dem in _term definierten String übereinstimmen. 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

Wenn ein Nutzer den Wert des Attributs _term in eine Suchanfrage einfügt, lautet die effektive Suchanfrage „Begriff ODER Synonyme“. Wenn der Begriff "scifi" beispielsweise mit dem Synonym "science fiction" definiert ist, werden mit einer Suchanfrage, die das Wort "scifi" enthält, Elemente gefunden, die entweder "scifi" oder "science fiction." enthalten.

Synonyme werden jedoch 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.

Wenn Sie Synonyme bidirektional verwenden möchten, müssen Sie sie für jeden Begriff einzeln bestimmen:

Laufzeit Synonyme
scifi science fiction
science fiction scifi

Bei der Verarbeitung einer Abfrage werden Bindestriche und andere Satzzeichen entfernt, bevor Synonyme angewendet werden. Die Nutzeranfrage "sci-fi" stimmt mit dem _term überein."sci fi." Wenn Sie Synonyme für Begriffe erstellen möchten, die von Nutzern mit Bindestrich geschrieben werden können, müssen Sie für _term zuerst festlegen, dass Leerzeichen anstatt von Bindestrichen verwendet werden.

Für das vorherige Beispiel würde das bedeuten, dass in Nutzerabfragen die Begriffe "sci-fi," "sci fi," "scifi," und "science fiction" austauschbar verwendet werden können:

Laufzeit Synonyme
scifi science fiction, sci fi
sci fi science fiction, scifi
science fiction scifi, sci fi

Standardmäßig gelten Synonyme in allen Datenquellen für eine gesamte Domain. Insbesondere werden Synonyme für alle Suchanfragen unabhängig von der Datenquelle auf alle Suchanwendungen angewendet. Sie können aber auch Synonyme für bestimmte Datenquellen definieren.

Globale Synonyme mit dem Cloud Search SDK definieren

Mit dem Content Connector SDK können Sie Begriffe und deren 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:

  • Für Synonymeinträge muss die Einstellung „domain public“ verwendet werden. Im vorherigen Beispiel wird die Access Control List (ACL) hierfür auf DOMAIN_PUBLIC_ACL gesetzt.
  • Die folgenden Attribute dürfen für die Konfigurationsdatei nicht definiert werden, da sie die Einstellung „domain public“ im Code überschreiben:
    • defaultAcl.mode=FALLBACK
    • defaultAcl.public=true

Anwendungsspezifische Synonyme für die Suche definieren

Standardmäßig gelten Synonyme für alle Datenquellen in allen Suchanwendungen.

Angenommen, Sie haben in Ihrer Organisation ein Entwickler- und ein Vertriebsteam und möchten die Suche für jedes Team individuell anpassen. Dafür sollen auch tätigkeitsspezifische Synonyme festgelegt werden. In diesem Fall bietet es sich an, eine Suchanwendung mit einer Datenquelle und Synonymen zu erstellen, die spezifisch für Entwickler sind, und eine andere mit einer Datenquelle und Synonymen, die sich auf den Vertrieb beziehen. Dazu indexieren Sie jedes Synonym mit _onlyApplicableForAttachedSearchApplications=true in einer bestimmten Datenquelle. Damit gelten die Synonyme nur für Suchanwendungen, die eine bestimmte Datenquelle enthalten.

Wenn Sie beim vorherigen Beispiel die folgende Codezeile hinzufügen, werden die indexierten Synonyme datenquellenspezifisch angewendet:

structuredData.put("_onlyApplicableForAttachedSearchApplications", true);