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

Schreiben von SOSL-Abfragen

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 Entwicklerkonsole 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

Die Syntax einer grundlegenden SOSL-Abfrage sieht wie folgt aus:

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. Diese SOSL-Abfrage kombiniert zwei Suchbegriffe mithilfe des logischen Operators OR – sie sucht in einem beliebigen Feld 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.

List<List<sObject>> searchList = [FIND 'Wingo OR SFDC' 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)

Lernen Sie weiter kostenlos!
Registrieren Sie sich für einen Account, um fortzufahren.
Was ist für Sie drin?
  • Holen Sie sich personalisierte Empfehlungen für Ihre Karriereplanung
  • Erproben Sie Ihre Fähigkeiten mithilfe praktischer Aufgaben und Quizze
  • Verfolgen Sie Ihre Fortschritte nach und teilen Sie sie mit Arbeitgebern
  • Nutzen Sie Mentoren und Karrierechancen