Empiece a realizar un seguimiento de su progreso
Inicio de Trailhead
Inicio de Trailhead
Estimación de tiempo

Escribir consultas SOSL

Objetivos de aprendizaje

Después de completar esta unidad, podrá:
  • Describir las diferencias entre SOSL y SOQL.
  • Buscar campos en varios objetos mediante consultas SOSL.
  • Ejecutar consultas SOSL mediante el editor de consultas de la consola de desarrollador.

Escribir consultas SOSL

El lenguaje de búsqueda de objetos de Salesforce (SOSL, Salesforce Object Search Language) es un lenguaje de búsqueda de Salesforce usado para realizar búsquedas de texto en registros. Use SOSL para buscar campos en varios registros de objetos estándar y personalizados de Salesforce. SOSL es similar a Apache Lucene.

La adición de consultas SOSL a Apex es un proceso sencillo. Puede insertar consultas SOSL directamente en su código Apex. Si SOSL está insertado en Apex, se llama SOSL en línea.

Este es un ejemplo de consulta SOSL en el que se buscan cuentas y contactos que tengan campos con la palabra 'SFDC'.

List<List<SObject>> searchList = [FIND 'SFDC' IN ALL FIELDS 
                                      RETURNING Account(Name), Contact(FirstName,LastName)];

Diferencias y similitudes entre SOQL y SOSL

Como en el caso de SOQL, SOSL permite buscar registros de su organización para obtener información específica. A diferencia de SOQL, que solo puede consultar un único objeto estándar o personalizado cada vez, una sola consulta SOSL permite buscar todos los objetos.

Otra diferencia es que SOSL establece la coincidencia de los campos en función de una palabra coincidente, mientras que SOQL establece una coincidencia exacta de forma predeterminada (si no se usan comodines). Por ejemplo, la búsqueda de 'Digital' en SOSL devuelve registros cuyos valores de campo son 'Digital' o 'The Digital Company', pero SOQL devuelve solamente registros con valores de campo 'Digital'.

SOQL y SOSL son dos lenguajes independientes con una sintaxis diferente. Cada lenguaje tiene un caso de uso distinto:

  • Use SOQL para recuperar registros para un solo objeto.
  • Use SOSL para buscar campos en varios objetos. Las consultas SOSL permiten buscar la mayoría de los campos de texto de un objeto.

Requisitos

En el caso de algunas consultas de esta unidad, se espera que la organización tenga cuentas y contactos. Si no ha creado datos de ejemplo en la unidad sobre SOQL, cree datos de ejemplo en esta unidad. En caso contrario, puede omitir la creación de datos de ejemplo en esta sección.

  1. En la consola de desarrollador, abra la ventana de ejecución anónima desde el menú Debug (Depurar).
  2. Inserte el siguiente miniprograma en la ventana y haga clic en Execute (Ejecutar).
// 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;

Uso del editor de consultas

La consola de desarrollador incluye una consola de editor de consultas, la cual permite ejecutar consultas SOSL y ver los resultados. El editor de consultas es un método rápido para inspeccionar la base de datos. Además, es una buena forma de probar sus consultas SOSL antes de agregarlas al código Apex. Si usa el editor de consultas, debe especificar solamente la declaración SOSL sin el código Apex que la rodea.

Vamos a intentar ejecutar el siguiente ejemplo de SOSL:

  1. En la consola de desarrollador, haga clic en la ficha Query Editor (Editor de consultas).
  2. Copie y pegue lo siguiente en el primer cuadro debajo del editor de consultas y, a continuación, haga clic en Execute (Ejecutar).
FIND {Wingo} IN ALL FIELDS RETURNING Account(Name), Contact(FirstName,LastName,Department)

Todos los registros de cuenta y contacto de su organización que cumplan los criterios se muestran en la sección de resultados de la consulta en forma de filas con campos. Los resultados se agrupan en fichas para cada objeto (cuenta o contacto). La consulta SOSL devuelve registros con campos cuyos valores coinciden con Wingo. Según los datos de ejemplo, dado que tan solo un contacto tiene un campo con el valor Wingo, se devuelve este contacto.

Nota

Nota

La consulta de búsqueda en el editor de consultas y la API se debe incluir entre llaves ({Wingo}). Por el contrario, la consulta de búsqueda en Apex se incluye entre comillas simples ('Wingo').

Sintaxis de SOSL básica

SOSL permite especificar los siguientes criterios de búsqueda:
  • Expresión de texto (una sola palabra o una frase) que buscar.
  • Ámbito de campos en los que buscar.
  • Lista de objetos y campos que recuperar.
  • Condiciones para la selección de filas en objetos de origen.

Esta es la sintaxis de una consulta de SOSL básica:

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

SearchQuery es el texto que buscar (una sola palabra o una frase). Los términos de búsqueda se pueden agrupar con operadores lógicos (AND, OR) y paréntesis. Además, los términos de búsqueda pueden incluir caracteres comodín (*, ?). El carácter comodín * coincide con cero o más caracteres en el centro o al final del término de búsqueda. El carácter comodín ? coincide solo con un carácter en el centro o al final del término de búsqueda.

No se aplica la distinción entre mayúsculas y minúsculas a las búsquedas de texto. Por ejemplo, la búsqueda de Customer, customer o CUSTOMER devuelve los mismos resultados.

SearchGroup es opcional. Es el ámbito de los campos en el que se va a buscar. Si no se especifica, el ámbito de la búsqueda predeterminada equivale a todos los campos. SearchGroup puede aplicar uno de los siguientes valores:

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

ObjectsAndFields es opcional. Es la información que se devuelve en el resultado de la búsqueda (lista de uno o varios sObjects y, en cada sObject, lista de uno o varios campos con valores opcionales mediante los que filtrar). Si no se especifica, los resultados de la búsqueda contienen los Id. de todos los objetos encontrados.

Palabras individuales y frases

SearchQuery contiene dos tipos de texto:

  • Palabra individual: una sola palabra, como test o hello. Las palabras de SearchQuery se delimitan mediante espacios, puntuación y cambios de letras a dígitos (y viceversa). En el caso de las palabras, nunca se aplica la distinción entre mayúsculas y minúsculas.
  • Frase: conjunto de palabras y espacios incluidos entre comillas dobles, como "john smith". Se pueden combinar varias palabras mediante operadores lógicos y de agrupación para formar una consulta más compleja.

Ejemplos de búsquedas

Para saber cómo funciona la búsqueda mediante SOSL, vamos a trabajar con distintas cadenas de búsqueda para ver en qué se basa el resultado de los datos de ejemplo. En esta tabla se incluyen varias cadenas de búsqueda de ejemplo y los resultados de la búsqueda mediante SOSL.

Buscar en todos los campos: Descripción de la búsqueda Registros y campos coincidentes
The Query Esta búsqueda devuelve todos los registros cuyos campos contienen ambas palabras: The y Query en cualquier ubicación del texto. Ni importa el orden de las palabras en el término de búsqueda. Account: The SFDC Query Man (Name field matched)
Wingo OR Man En esta búsqueda se usa el operador lógico OR. Devuelve registros con campos que contienen la palabra Wingo o registros con campos que contienen la palabra Man. Contact: Carol Ruiz, Department: 'Wingo'

Account: The SFDC Query Man (Name field matched)

1212 Esta búsqueda devuelve todos los registros cuyos campos contienen la palabra 1212. Los campos de teléfono que terminan por -1212 son coincidentes porque 1212 se considera una palabra y está delimitada por el guión. Account: The SFDC Query Man, Phone: '(415)555-1212'

Contact: Carol Ruiz, Phone: '(415)555-1212'

wing* Esta es una búsqueda de un carácter comodín. Esta búsqueda devuelve todos los registros con un valor de campo que empieza por wing. Contact: Maria Ruiz, Department: 'Wingo'

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

Ejemplo de SOSL en Apex

En este ejemplo se muestra cómo ejecutar una consulta SOSL en Apex. En esta consulta SOSL se combinan dos términos de búsqueda mediante el operador lógico OR (se buscan Wingo o SFDC en cualquier campo). Este ejemplo devuelve todas las cuentas de ejemplo, ya que cada una tiene un campo con una de las palabras. Los resultados de la búsqueda con SOSL se devuelven como una lista de listas. Cada lista contiene un conjunto de los registros devueltos. En este caso, la lista tiene dos elementos. En el índice 0, la lista contiene el conjunto de cuentas. En el índice 1, la lista contiene el conjunto de contactos.

Ejecute este miniprograma en la ventana de ejecución anónima de la consola de desarrollador. A continuación, revise el registro de depuración para verificar que se devuelven todos los registros.

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

Más información...

Puede filtrar, reordenar y limitar los resultados devueltos de una consulta SOSL. Dado que las consultas SOSL pueden devolver varios sObjects, estos filtros se aplican en cada sObject en la cláusula RETURNING.

Para filtrar los resultados de SOSL, agregue condiciones en la cláusula WHERE para un objeto. Por ejemplo, esto solo devuelve cuentas cuya industria es Apparel (textil): RETURNING Account(Name, Industry WHERE Industry='Apparel')

Además, se permite la ordenación de los resultados para un sObject mediante la adición de ORDER BY para un objeto. Por ejemplo, esto tiene como resultado que las cuentas devueltas se ordenen por el campo Name: RETURNING Account(Name, Industry ORDER BY Name).

El número de registros devueltos se puede limitar a un subconjunto de registros. En este ejemplo las cuentas devueltas se limitan solo a 10: RETURNING Account(Name, Industry LIMIT 10)