Synonyme definieren

Es ist üblich, dass ein Unternehmen eine eigene Terminologie oder mehrere Möglichkeiten hat, auf ein Konzept oder einen Gegenstand zu verweisen. Sie sollten Synonyme festlegen, um Äquivalenz von Begriffen herzustellen und Nutzern bei der Suche nach Elementen zu helfen.

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

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

Property Typ Beschreibung Erforderlich?
_term string Der Begriff, der definiert werden soll. Empfohlene Werte sind Wörter ohne Bindestrich oder Wortgruppen ohne Satzzeichen. Erforderlich
_synonym string (repeated) Alternative Begriffe in Abfragen, die mit dem in _term definierten String übereinstimmen. Erforderlich
_onlyApplicableForAttachedSearchApplications boolean Sie können 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 Abfrage einfügt, wird die effektive Abfrage zu term ODER-Synonymen. Wenn beispielsweise der Begriff "scifi" mit dem Synonym "science fiction" definiert ist, werden bei einer Abfrage mit dem Wort "scifi" nur Elemente gefunden, die entweder "scifi" oder "science fiction." enthalten.

Synonyme werden nicht bidirektional angewendet. Wenn die Abfrage stattdessen "science fiction," lautet, wendet Cloud Search keine Synonyme auf die Abfrage an. Bei der Abfrage werden nur Elemente gefunden, in denen "science fiction." enthalten ist. Elemente, die "scifi" enthalten, werden weggelassen.

Um beide Begriffe austauschbar zu machen, müssen Sie jeden Begriff einzeln definieren:

Laufzeit Synonym
scifi science fiction
science fiction scifi

Bei der Verarbeitung von Abfragen werden Bindestriche und andere Satzzeichen entfernt, bevor Synonyme angewendet werden. Die Nutzerabfrage "sci-fi" stimmt mit _term "sci fi." überein. Wenn Sie Synonyme für Begriffe erstellen möchten, die von Nutzern mit Bindestrich geschrieben werden können, normalisieren Sie _term zuerst so, dass Leerzeichen anstelle von Bindestrichen verwendet werden.

Ausgehend vom Beispiel stimmen die folgenden Definitionen überein, dass "sci-fi," "sci fi," "scifi," und "science fiction" in Nutzerabfragen als austauschbar behandelt werden:

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

Standardmäßig gelten Synonyme in allen Datenquellen für die gesamte Domain. Synonyme werden unabhängig von der Datenquelle bei allen Suchanfragen in allen Suchanwendungen angewendet. Wenn Sie Synonyme für bestimmte Datenquellen verwenden möchten, lesen Sie den Abschnitt 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 zum Erstellen eines Connectors finden Sie unter Inhaltsconnectors erstellen.

Das folgende Snippet zeigt, wie ein RepositoryDoc erstellt wird, das den Begriff und sein Synonym basierend auf einem CSV-Dateieintrag darstellt:

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öffentlich sein. Im vorherigen Beispiel wird die ACL auf DOMAIN_PUBLIC_ACL gesetzt.
  • Die folgenden Attribute sollten nicht für die 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 rollenspezifischer Synonyme. In diesem Fall könnten Sie eine Suchanwendung mit einer entwicklungsspezifischen Datenquelle und Synonymen und eine weitere Suchanwendung mit einer vertriebsspezifischen Datenquelle und Synonymen erstellen. Indexieren Sie zu diesem Zweck jedes Synonym in einer bestimmten Datenquelle mithilfe von _onlyApplicableForAttachedSearchApplications=true. Durch diese Einstellung werden die Synonyme so eingeschränkt, dass sie nur auf Suchanwendungen mit einer bestimmten Datenquelle angewendet werden.

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

structuredData.put("_onlyApplicableForAttachedSearchApplications", true);