Skip to main content

Escribir consultas SOSL

Objetivos de aprendizaje

Después de completar esta unidad, podrá:

  • Comprender las diferencias entre SOSL y otras alternativas de búsqueda de texto completo.
  • Identificar la sintaxis básica de SOSL.
  • Describir las diferencias entre SOSL y SOQL.
  • Construir una consulta SOSL que busque en múltiples sObject.

¿Qué es SOSL?

En la última unidad se le presentó SOQL, y aprendió cómo puede utilizarlo para consultar datos en sObject y sus tablas relacionadas. Para realizar consultas basadas en texto entre múltiples sObject, puede utilizar SOSL (Salesforce Object Search Language), la opción de Salesforce para la búsqueda de texto completo.

Como desarrollador de .NET, es posible que esté familiarizado con las funciones de búsqueda de texto completo disponibles con Microsoft SQL Server (MS FTS). También puede estar familiarizado con una biblioteca de motor de búsqueda muy conocida llamada Lucene.Net, que se extrajo de la versión Java original para C#.

La buena y la mala noticia es que SOSL es diferente de esas alternativas de búsqueda de texto completo. Las diferencias más grandes tienen que ver con lo que se requiere para establecer y mantener los índices. Salesforce utiliza la búsqueda de código abierto y el motor de indexación Lucene para las funciones de SOSL, pero está configurado de tal forma que no tiene que preocuparse de instalar y configurar nada. Usted tampoco es responsable de mantener índices. De hecho, para la mayor parte, no tiene mucho control sobre cómo se utilizan los índices de búsqueda, lo que es una buena noticia porque la redacción de consultas SOSL es fácil.

Sin embargo, como un desarrollador de .NET que desea adaptar y ajustar su código. De este modo, escuchar que tiene poco control sobre la configuración y los índices puede hacer sentir un poco incómodo. Queremos reasegurarle que aunque tiene menos control, aún puede hacer cosas que mejoran el desempeño de las consultas, tanto para consultas SOSL como SOQL. En breve trataremos estos métodos de forma bastante amplia, pero por ahora, pasemos por las diferencias de la sintaxis SOSL.

Creación de una consulta SOSL

Si está familiarizado con MS FTS, sabe que necesita redactar consultas SELECT que utilicen una declaración CONTAINS o FREETEXT. La potente búsqueda CONTAINS, que tiene muchas variaciones, le permite buscar coincidencias exactas o parciales, así como buscar palabras que se parecen a otra palabra.

SOSL utiliza una sintaxis de búsqueda más sencilla que no utiliza la palabra clave SELECT de SOQL. En su lugar, utiliza la palabra clave FIND. Una consulta básica tiene el siguiente aspecto:

FIND {"grand*"} IN ALL FIELDS RETURNING Account(Name), Contact(LastName, FirstName, Email)

Analizándola, vemos que tiene tres partes.

Cláusula FIND con término de búsqueda

La cláusula FIND es obligatoria. Es lo que hace que una búsqueda SOSL sea única. FIND viene seguida del término de búsqueda que desee, ya sea una única palabra o una frase. En este caso, es la palabra “grand”. También puede incluir caracteres comodín, que nuestro ejemplo incluye, como estos dos:

* matches zero or more characters at the middle or end of the search term
?matches only one character at the middle or end of the search term

Hablaremos más sobre comodines en la siguiente unidad. Pero mientras tanto, tenga en cuenta que solo porque pueda utilizar un comodín en el centro o al final del término de búsqueda no significa que debería hacerlo. De hecho, como mejor práctica, no es buena idea, ya que puede afectar gravemente al desempeño de la consulta.

Cláusula IN

Utilice la cláusula IN para especificar un grupo de búsqueda. Indica a Salesforce en qué campos buscar. No obstante tenemos algo realmente importante que tiene que tener en cuenta, así que siga con nosotros.

En el ejemplo anterior, especificamos ALL FIELDS. Uno podría tomarse esto literalmente y pensar que se buscará en todos los campos, pero dependiendo de qué objeto especifique en la cláusula RETURNING, solo se incluyen ciertos campos basados en texto. ¿Qué?

Como dijimos, siga con nosotros. Verá, si el objeto que está devolviendo es un artículo, un documento, un comentario o elemento de noticias en tiempo real, un producto o una solución, se busca en TODOS los campos porque estos son los tipos de objetos en los que desearía que se buscara en todos los campos.

Pero si está buscando entre la mayoría de los objetos estándar o personalizados, que incluyen toda suerte de campos no basados en texto, tiene sentido buscar únicamente en los campos de nombre, email, teléfono y de la barra lateral. Por cierto, este es el comportamiento predeterminado.

Así que digamos que en vez de especificar ALL FIELDS, desea buscar únicamente en los campos de nombre. Entonces utilizaría NAME FIELDS. Para buscar únicamente en los campos de teléfono, utilice PHONE FIELDS. ¿Ve como funciona esto?

Cláusula RETURNING

Utilice la cláusula RETURNING para especificar qué datos devolver y qué objetos buscar. En el ejemplo anterior, se devolvió el campo Name desde Account y los campos Lastname, FirstName y Email desde Contact. La búsqueda miró en todos los campos con capacidad de búsqueda en ambos objetos, pero los resultados devueltos solo incluyen esos campos enumerados entre paréntesis.

Si especifica un nombre de objeto sin un nombre de campo entre paréntesis, la búsqueda devolverá únicamente el Id. de ese objeto si se encuentra una coincidencia.

La sintaxis SOSL tiene otras cláusulas opcionales que pueden ser de su interés. Consulte los documentos oficiales para aprender más sobre ellas.

De acuerdo, ahora se está preguntando cómo se compara SOSL con otros motores de búsqueda de texto completo cuando hablamos de coincidencias parciales. A parte de la palabra clave LIKE que puede utilizar en una consulta SOQL y los comodines que puede utilizar en la consulta SOSL, Salesforce proporciona únicamente una búsqueda de sinónimos para buscar apodos.

Nota

Nota

Lo importante que hay que saber sobre la búsqueda de apodos es que se aplica únicamente a las búsquedas en el idioma inglés en los objetos Account, Contact, Lead y User.

¿SOQL o SOSL?

¿Cuál utilizar? Estamos seguros de que no le sorprenderá leer esto: Depende de lo que esté intentando realizar.

Si necesita datos procedentes de un único objeto y sabe específicamente los criterios para ese objeto, quizá lo mejor sea utilizar SOQL. De hecho, la mayoría de sus consultas probablemente serán en SOQL.

SOSL es más útil cuando no sabe los campos y objetos exactos en los que residen sus datos y necesita buscar en múltiples objetos. Esto es especialmente cierto cuando esos objetos no están relacionados porque SOQL funciona únicamente con objetos relacionados.

Así que ahora que sabe por qué y cuándo utilizar una búsqueda SOSL, pasemos a construir una.

Puede ejecutar una búsqueda SOSL de más de una forma, pero ahora mismo nos vamos a centrar en la más fácil, que es utilizando Query Editor en Developer Console. Probablemente recordará esto de la última unidad sobre SOQL.

Requisitos

Antes de realizar una búsqueda SOSL, necesitamos incorporar datos a la organización de desarrollo. En primer lugar crearemos un documento de ejemplo que podamos cargar en nuestra organización de desarrollo.

  1. En el Bloc de notas o cualquier otro editor de texto, cree un archivo e ingrese el texto siguiente.
    First quarter figures were better than expected for new employee Joseph Smith.
  2. Guarde el archivo en su equipo local con el nombre TestDocument.txt.
  3. En su organización de Developer Edition, en la ficha Archivos, haga clic en Cargar archivos.
  4. Navegue hasta la ubicación donde guardó el archivo TestDocument.txt y haga clic en Open (Abrir).
  5. Haga clic en Listo.
Nota

Nota

El indexado SOSL se realiza de forma asíncrona, de manera que es posible realizar un cambio en el sistema y no ver los resultados en su búsqueda SOSL de forma inmediata.

También tenemos que agregar datos a algunos de nuestros objetos estándar.

  1. En el menú Configuración, seleccione Developer Console para abrir Developer Console.
  2. En Developer Console, seleccione Debug (Depurar) > Open Execute Anonymous Window (Abrir ventana de ejecución anónima).
  3. Elimine el código existente e inserte el siguiente fragmento de código:
    // Add Account and related Contact
    Account acct = new Account(
        Name='Test Account',
        Phone='(225)555-8989',
        NumberOfEmployees=10,
        BillingCity='Baton Rouge');
    insert acct;
    // Get the Id of the Inserted Account
    ID acctID = acct.ID;
    // Add a contact to the Account.Contact con = new Contact(
        FirstName='Joseph',
        LastName='Smith',
        Phone='(225)555-8787',
        Email='jsmith@testaccount.com',
        AccountId=acctID);
    insert con;
    
  4. Haga clic en Execute (Ejecutar).

Utilizar la Developer Console

Ahora que tenemos datos de ejemplo para buscar, podemos utilizar Query Editor para ejecutar una nueva búsqueda SOSL.

  1. En Developer Console, haga clic en la ficha Query Editor (Editor de consultas) en el panel inferior.
  2. Elimine el código existente e inserte el siguiente fragmento de código:
    FIND {joey} IN ALL FIELDS RETURNING Account(Name), Contact(LastName, FirstName), ContentVersion(Title)
    

Lo primero que se advierte aquí es que las comillas simples que encerraban el término de búsqueda en nuestro ejemplo anterior se sustituyeron por llaves. Debemos utilizarlas en vez de las comillas cuando la búsqueda SOSL se realiza en Query Editor. Si la búsqueda se realizara con código Apex, se utilizarían comillas simples. También hay que advertir que el término de búsqueda es la palabra “joey,” que es un apodo conocido de Joseph (el nombre que estamos buscando es Joseph).

  1. Haga clic en Execute (Ejecutar). Los resultados de la búsqueda solo muestran una ficha. El contacto que ingresó se enumera bajo la ficha Contact porque pudo encontrar una coincidencia basada en la función de apodos que quedó disponible en Winter ’16. Pero el archivo TestDocument que cargó no se enumera porque la búsqueda de apodos solo se aplica a los objetos Account, Contact, Lead y User. Revisemos nuestra prueba y consigamos todos los resultados.
  2. Sustituya el código existente de Query Editor por lo siguiente:
    FIND {jos*} IN ALL FIELDS RETURNING Account(Name), Contact(LastName, FirstName), ContentVersion(Title)
    
  3. Haga clic en Execute (Ejecutar).
  4. Los resultados de su búsqueda ahora muestran dos fichas. La ficha Document muestra el nombre del documento que cargó. Observe que utilizamos una búsqueda con comodines para conseguir todos los resultados que deseábamos.

Más información

Es posible que una búsqueda SOSL NO encuentre todos los resultados coincidentes debido a los límites. Recuerde, Salesforce es un entorno multiusuario. Si cada cliente pudiera utilizar el máximo de los recursos, todo el sistema se bloquearía en cuestión de minutos. Las búsquedas que superan los 20.000 caracteres pueden afectar al sistema. Por lo tanto, las búsquedas están limitadas en SOSL del mismo modo que en SOQL. A continuación vamos a aprender a optimizar sus consultas de búsqueda.

Comparta sus comentarios de Trailhead en la Ayuda de Salesforce.

Nos encantaría saber más sobre su experiencia con Trailhead. Ahora puede acceder al nuevo formulario de comentarios en cualquier momento en el sitio de Ayuda de Salesforce.

Más información Continuar a Compartir comentarios