Skip to main content
Build the future with Agentforce at TDX in San Francisco or on Salesforce+ on March 5–6. Register now.

Schreiben von SOSL-Abfragen

Lernziele

Nachdem Sie diese Lektion abgeschlossen haben, sind Sie in der Lage, die folgenden Aufgaben auszuführen:
  • Beschreiben der Unterschiede zwischen SOSL und SOQL
  • Suchen nach Feldern in mehreren Objekten mithilfe von SOSL-Abfragen
  • Ausführen von SOSL-Abfragen mithilfe des Abfrage-Editors in der Entwicklerkonsole
Hinweis

Hinweis

Lernen Sie auf Deutsch? Beginnen Sie die Aufgabe in einem Trailhead Playground in der Sprache Deutsch und verwenden Sie für die Navigation die in Klammern angegebenen Übersetzungen. Kopieren und fügen Sie nur die Angaben in Englisch ein, da zur Überprüfung der Aufgabe Daten in Englisch benötigt werden. Wenn Sie die Aufgabe in Ihrer deutschen Organisation nicht bestehen, empfehlen wir Ihnen folgende Vorgehensweise: (1) Stellen Sie das Gebietsschema auf USA um, (2) legen Sie Englisch als Sprache fest (Anweisungen dazu finden Sie hier) und (3) klicken Sie erneut auf die Schaltfläche "Check Challenge" (Aufgabe überprüfen).

Weitere Details dazu, wie Sie die übersetzte Trailhead-Umgebung optimal nutzen können, finden Sie unter dem Badge "Trailhead in Ihrer Sprache".

Erste Schritte mit SOSL

Salesforce Object Search Language (SOSL) ist eine Suchsprache von Salesforce, die zur Durchführung von Textsuchvorgängen in Datensätzen dient. Sie können SOSL zum Durchsuchen von Feldern in mehreren standardmäßigen und benutzerdefinierten Objektdatensätzen in Salesforce verwenden. SOSL ähnelt Apache Lucene.

Das Hinzufügen von SOSL-Abfragen in Apex ist einfach – Sie können SOSL-Abfragen direkt in den Apex-Code einbetten. Wenn SOSL in Apex eingebettet ist, wird es als Inline-SOSL bezeichnet.

Unten sehen Sie ein Beispiel einer SOSL-Abfrage, die nach Accounts und Kontakten sucht, die Felder mit dem Wort "SFDC" aufweisen.
List<List<SObject>> searchList = [FIND 'SFDC' IN ALL FIELDS 
                                      RETURNING Account(Name), Contact(FirstName,LastName)];

Unterschiede und Gemeinsamkeiten zwischen SOQL und SOSL

Wie mit SOQL können Sie auch mit SOSL die Datensätze Ihrer Organisation nach bestimmten Informationen durchsuchen. Im Gegensatz zu SOQL, das nur jeweils ein Standardobjekt bzw. benutzerdefiniertes Objekt abfragen kann, kann eine einzelne SOSL-Abfrage alle Objekte durchsuchen.

Ein weiterer Unterschied besteht darin, dass SOSL Felder basierend auf Wortübereinstimmungen abgleicht, während SOQL standardmäßig nach genauen Treffern sucht (sofern keine Platzhalter verwendet werden). Die Suche nach "Digital" in SOSL beispielsweise gibt Datensätze zurück, deren Feldwerte "Digital" oder "The Digital Company" lauten, SOQL jedoch gibt nur Datensätze mit den Feldwerten "Digital" zurück.

SOQL und SOSL sind zwei eigenständige Sprachen mit unterschiedlicher Syntax. Jede Sprache hat ihren eigenen Anwendungsfall:

  • Verwenden Sie SOQL zum Abrufen von Datensätzen für ein einzelnes Objekt.
  • Verwenden Sie SOSL zum Durchsuchen von Feldern in mehreren Objekten. SOSL-Abfragen können die meisten Textfelder in einem Objekt durchsuchen.

Voraussetzungen

Einige Abfragen in diesem Abschnitt setzen voraus, dass die Organisation über Accounts und Kontakte verfügt. Wenn Sie im Abschnitt zu SOQL keine Beispieldaten erstellt haben, erstellen Sie sie in diesem Abschnitt. Ansonsten können Sie die Erstellung der Beispieldaten in diesem Abschnitt überspringen.

  1. Öffnen Sie in der Entwicklerkonsole über das Menü Debug das Fenster für die anonyme Ausführung.
  2. Fügen Sie den unten stehenden Codeauszug in das Fenster ein und klicken Sie auf Execute (Ausführen).
// Add account and related contact
Account acct = new Account(
    Name='SFDC Computing',
    Phone='(415)555-1212',
    NumberOfEmployees=50,
    BillingCity='San Francisco');
insert acct;
// Once the account is inserted, the sObject will be 
// populated with an ID.
// Get this ID.
ID acctID = acct.ID;
// Add a contact to this account.
Contact con = new Contact(
    FirstName='Carol',
    LastName='Ruiz',
    Phone='(415)555-1212',
    Department='Wingo',
    AccountId=acctID);
insert con;
// Add account with no contact
Account acct2 = new Account(
    Name='The SFDC Query Man',
    Phone='(310)555-1213',
    NumberOfEmployees=50,
    BillingCity='Los Angeles',
    Description='Expert in wing technologies.');
insert acct2;

Verwenden des Abfrage-Editors

Die Entwicklerkonsole umfasst die Abfrage-Editor-Konsole, mit der Sie SOSL-Abfragen ausführen und die Ergebnisse anzeigen können. Der Abfrage-Editor bietet eine schnelle Möglichkeit zum Überprüfen der Datenbank. Dies ist eine gute Methode, Ihre SOSL-Abfragen zu testen, bevor Sie sie zu Ihrem Apex-Code hinzufügen. Wenn Sie den Abfrage-Editor verwenden, müssen Sie nur die SOSL-Anweisung ohne den umgebenden Apex-Code angeben.

Führen Sie folgendes SOSL-Beispiel aus:

  1. Klicken Sie in der Developer Console auf die Registerkarte Query Editor (Abfrage-Editor).
  2. Kopieren Sie den folgenden Code, fügen Sie ihn in das erste Feld unter "Query Editor" ein und klicken Sie dann auf Execute (Ausführen).
FIND {Wingo} IN ALL FIELDS RETURNING Account(Name), Contact(FirstName,LastName,Department)

Alle Account- und Kontaktdatensätze in Ihrer Organisation, die die Kriterien erfüllen, werden im Abschnitt "Query Results" (Abfrageergebnisse) als Zeilen mit Feldern angezeigt. Die Ergebnisse werden für jedes Objekt (Account oder Kontakt) in Registerkarten zusammengefasst. Die SOSL-Abfrage gibt Datensätze mit Feldern zurück, deren Werte mit "Wingo" übereinstimmen. Basierend auf unseren Beispieldaten weist nur ein Kontakt ein Feld mit dem Wert "Wingo" auf, daher wird dieser Kontakt zurückgegeben.

Hinweis

Hinweis

Die Suchabfrage muss im Abfrage-Editor und in der API in geschweifte Klammern gesetzt werden ({Wingo}). In Apex hingegen wird die Suchabfrage zwischen einfache Anführungszeichen gesetzt ('Wingo').

Grundlegende SOSL-Syntax

Mit SOSL können Sie folgende Suchkriterien angeben:
  • Textausdruck (einzelnes Wort oder Wortgruppe), nach dem gesucht werden soll
  • Umfang der zu durchsuchenden Felder
  • Liste der abzurufenden Objekte und Felder
  • Bedingungen zum Auswählen von Zeilen in den Quellobjekten

Dies ist die Syntax einer grundlegenden SOSL-Abfrage in Apex: 

FIND 'SearchQuery' [IN SearchGroup] [RETURNING ObjectsAndFields]

Denken Sie daran, dass die Syntax im Abfrage-Editor und in der API geringfügig unterschiedlich ist:

FIND {SearchQuery} [IN SearchGroup] [RETURNING ObjectsAndFields]

SearchQuery ist der Text, nach dem gesucht werden soll (ein einzelnes Wort oder eine Wortgruppe). Suchbegriffe können mithilfe von logischen Operatoren (AND, OR) und Klammern gruppiert werden. Suchbegriffe können auch Platzhalterzeichen (*, ?) enthalten. Der Platzhalter "*" gleicht null oder mehrere Zeichen in der Mitte oder am Ende des Suchbegriffs ab. Der Platzhalter "?" gleicht nur ein Zeichen in der Mitte oder am Ende des Suchbegriffs ab.

Bei Textsuchvorgängen wird nicht zwischen Groß- und Kleinschreibung unterschieden. Die Suche nach "Customer", "customer" oder "CUSTOMER" beispielsweise gibt jeweils dieselben Ergebnisse zurück.

SearchGroup ist optional. Dies ist der Umfang der zu durchsuchenden Felder. Falls keine Angabe erfolgt, umfasst der Standard-Suchumfang alle Felder. Für SearchGroup kann einer der folgenden Werte verwendet werden:

  • ALL FIELDS
  • NAME FIELDS
  • EMAIL FIELDS
  • PHONE FIELDS
  • SIDEBAR FIELDS

ObjectsAndFields ist optional. Dies sind die im Suchergebnis zurückzugebenden Informationen – eine Liste mit einem oder mehr sObjects und, innerhalb jedes sObject, eine Liste mit einem oder mehr Feldern mit optionalen Werten, nach denen gefiltert werden kann. Falls keine Angabe erfolgt, enthalten die Suchergebnisse die IDs aller gefundenen Objekte.

Einzelne Wörter und Wortgruppen

Eine SearchQuery enthält zwei Typen von Text:

  • Einzelnes Wort: einzelnes Wort, z. B. "test" oder "hello". Wörter in der "SearchQuery" werden durch Leerzeichen, Satzzeichen oder Wechsel von Buchstaben zu Ziffern (und umgekehrt) getrennt. Bei Wörtern wird nie zwischen Groß- und Kleinschreibung unterschieden.
  • Wortgruppe: Sammlung von Wörtern und Leerzeichen, umgeben von doppelten Anführungszeichen, z. B. "john smith". Mehrere Wörter können mithilfe von logischen Operatoren und Gruppierungsoperatoren zu einer komplexeren Abfrage kombiniert werden.

Suchbeispiele

Um herauszufinden, wie die Suche mit SOSL funktioniert, probieren wir verschiedene Suchzeichenfolgen aus, um zu sehen, was basierend auf unseren Beispieldaten ausgegeben wird. In unten stehender Tabelle werden verschiedene Beispiel-Suchzeichenfolgen und die SOSL-Suchergebnisse aufgelistet.

Suche in allen Feldern nach: Beschreibung des Suchvorgangs Abgeglichene Datensätze und Felder
The Query Diese Suche gibt alle Datensätze zurück, deren Felder beide Wörter, "The" und "Query", an einer beliebigen Stelle im Text enthalten. Die Reihenfolge der Wörter im Suchbegriff spielt keine Rolle. Account: The SFDC Query Man (Namensfeld abgeglichen)
Wingo OR Man Bei dieser Suche wird der logische Operator OR verwendet. Sie gibt Datensätze mit Feldern, die das Wort "Wingo" enthalten, und Datensätze mit Feldern, die das Word "SFDC" enthalten, zurück. Kontakt: Carol Ruiz, Abteilung: 'Wingo'

Account: The SFDC Query Man (Namensfeld abgeglichen)

1212 Diese Suche gibt alle Datensätze zurück, deren Felder das Wort "1212" enthalten. Telefonfelder, die auf "-1212" enden, werden als Treffer zurückgegeben, da "1212" bei Abtrennung durch den Bindestrich als Wort angesehen wird. Account: The SFDC Query Man, Telefon: '(415) 555-1212'

Kontakt: Carol Ruiz, Telefon: '(415) 555-1212'

wing* Dies ist eine Platzhaltersuche. Diese Suche gibt alle Datensätze mit einem Feldwert zurück, der mit "wing" beginnt. Kontakt: Maria Ruiz, Abteilung: 'Wingo'

Account: The SFDC Query Man, Beschreibung: 'Expert in wing technologies.'

Beispiel für SOSL in Apex

Das folgende Beispiel zeigt, wie eine SOSL-Abfrage in Apex ausgeführt wird. Zunächst wird der Variablen soslFindClause die Suchanfrage zugewiesen, die aus zwei Begriffen (Wingo und SFDC) besteht, welche mittels des logischen Operators OR kombiniert werden. Die SOSL-Abfrage verweist auf diese lokale Variable, indem sie ihr einen Doppelpunkt voranstellt, was auch als Bindung bezeichnet wird. Die resultierende SOSL-Abfrage sucht in allen Feldern nach "Wingo" oder "SFDC". Mit diesem Beispiel werden alle Beispielaccounts zurückgegeben, da sie alle ein Feld aufweisen, das eines der Wörter enthält. Die SOSL-Suchergebnisse werden in einer Liste von Listen zurückgegeben. Jede Liste enthält ein Array der zurückgegebenen Datensätze. In diesem Fall verfügt die Liste über zwei Elemente. Bei Index 0 enthält die Liste das Array mit Accounts. Bei Index 1 enthält die Liste das Array mit Kontakten.

Führen Sie diesen Codeauszug im Fenster für die anonyme Ausführung der Entwicklerkonsole aus. Überprüfen Sie anschließend im Debug-Protokoll, dass alle Datensätze zurückgegeben wurden.

String soslFindClause = 'Wingo OR SFDC';
List<List<sObject>> searchList = [FIND :soslFindClause IN ALL FIELDS
                    RETURNING Account(Name),Contact(FirstName,LastName,Department)];
Account[] searchAccounts = (Account[])searchList[0];
Contact[] searchContacts = (Contact[])searchList[1];
System.debug('Found the following accounts.');
for (Account a : searchAccounts) {
    System.debug(a.Name);
}
System.debug('Found the following contacts.');
for (Contact c : searchContacts) {
    System.debug(c.LastName + ', ' + c.FirstName);
}

Weitere Infos

Sie können die zurückgegebenen Ergebnisse einer SOSL-Abfrage filtern, neu anordnen und begrenzen. Da SOSL-Abfragen mehrere sObjects zurückgeben können, werden diese Filter in jedem sObject innerhalb der RETURNING-Klausel angewendet.

SOSL-Ergebnisse können durch Hinzufügen von Bedingungen in der WHERE-Klausel für ein Objekt gefiltert werden. Folgendes Beispiel etwa gibt nur Accounts zurück, deren Branche "Apparel" lautet: RETURNING Account(Name, Industry WHERE Industry='Apparel').

Entsprechend können Ergebnisse für ein sObject durch Hinzufügen von ORDER BY für ein Objekt angeordnet werden. Mit folgendem Beispiel etwa werden die zurückgegebenen Accounts nach dem Namensfeld angeordnet: RETURNING Account(Name, Industry ORDER BY Name).

Die Anzahl der zurückgegebenen Datensätze kann auf einen Teil der Datensätze begrenzt werden. Mit diesem Beispiel werden die zurückgegebenen Accounts auf nur 10 begrenzt: RETURNING Account(Name, Industry LIMIT 10).

Teilen Sie Ihr Trailhead-Feedback über die Salesforce-Hilfe.

Wir würden uns sehr freuen, von Ihren Erfahrungen mit Trailhead zu hören: Sie können jetzt jederzeit über die Salesforce-Hilfe auf das neue Feedback-Formular zugreifen.

Weitere Infos Weiter zu "Feedback teilen"