# Dec 18th, 2024: \[ES\] Filtrando texto con ES|QL

**URL:** <https://discuss.elastic.co/t/dec-18th-2024-es-filtrando-texto-con-es-ql/371776>\
**Category:** Advent Calendar\
**Tags:** esql\
**Created:** [December 18, 2024, 8:00am UTC](https://discuss.elastic.co/t/dec-18th-2024-es-filtrando-texto-con-es-ql/371776 "2024-12-18T08:00:26Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Carlos\_D](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/carlos_d/32/126245_2.png) [@Carlos\_D](https://discuss.elastic.co/u/Carlos_D)\
**Post date:** [December 18, 2024, 8:00am UTC](https://discuss.elastic.co/t/dec-18th-2024-es-filtrando-texto-con-es-ql/371776/1 "2024-12-18T08:00:26Z")

</div>

This post is also available [in english](https://discuss.elastic.co/t/371759).

¿Ya has probado ES|QL? ES|QL es un lenguaje diseñado desde cero para Elasticsearch. Está pensado para proporcionar la mejor experiencia para filtrar, analizar y transformar tus datos.

El **filtrado de texto** es fundamental para acotar los resultados en las búsquedas. A menudo necesitarás búsquedas de texto para:

• Encontrar mensajes específicos en logs  
• Obtener resultados con una etiqueta o un valor en un campo determinados  
• Recuperar todos los hosts de una lista que contienen una cadena específica en su nombre

¡ES|QL puede ayudar! Hay varias funciones de filtrado de texto que puedes utilizar para encontrar texto en tus datos.

**Coincidencia exacta**

Puedes usar el operador de igualdad (`==`) para encontrar una coincidencia exacta de texto:

```auto
FROM logs
| WHERE environment == "production"

```

Esto sólo encontrará resultados que coincidan exactamente con la cadena proporcionada.

Por supuesto, puedes utilizar la expresividad de ES|QL para transformar tanto el texto que buscas como los valores en los que se buscará:

```auto
FROM logs
| WHERE LEFT(environment, 10) == TO_UPPER("production")

```

**Coincidencia parcial**

La búsqueda por patrones permite buscar una subcadena específica:

```auto
FROM hosts
| WHERE STARTS_WITH(host, "prod-")

```

```auto
FROM access
| WHERE ENDS_WITH(username, "-test")

```

También puedes usar patrones de cadenas con comodines (_wildcards_)…

```auto
FROM logs
| WHERE message LIKE """*NullPointerException*"""

```

… o expresiones regulares…

```auto
FROM users
| WHERE email RLIKE """.+\.com$"""

```

Las comillas triples evitan que sea necesario escapar caracteres, para que puedas concentrarte en lo que necesitas buscar.

**Limitaciones del filtrado de texto**

El filtrado de texto es perfecto para descubrir y filtrar tus datos, pero hay algunas limitaciones en los métodos anteriores:

• El texto no está [analizado](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html). Es posible que quieras utilizar [analizadores](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-overview.html) para procesar el texto y la consulta, asegurando que se obtenga el mejor resultado posible.  
• [Valores múltiples](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-multivalued-fields.html). Las funciones en ES|QL [devuelven null cuando se aplican a un campo con múltiples valores](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-multivalued-fields.html#esql-multivalued-fields-functions). Es necesario procesar de antemano los valores múltiples para poderlos buscar, por ejemplo, usando `MV_CONCAT`.

**Presentamos la nueva búsqueda de texto completo**

Hemos incluido la búsqueda de texto completo en ES|QL para conseguir mejores resultados en las búsquedas de texto.

Se han añadido dos nuevas funciones a [Elastic Serverless](https://www.elastic.co/guide/en/serverless/current/intro.html), que estarán disponibles también en Elasticsearch 8.17:

• `match(field, query)`: Permite hacer una [query match](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html) para buscar en campos específicos.  
• `qstr(query):` Usa la sintaxis de [query string](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html) para realizar consultas complejas.

Estas funciones usan los analizadores para realizar las búsquedas, y también pueden buscar en valores individuales en valores múltiples, sin necesidad de ningún paso adicional.

Ahora es posible realizar búsquedas de texto completo como la siguiente:

```auto
FROM logs
| WHERE match(message, "this is a test")

```

Se puede simplificar aún más la función `match` usando el operador match (`:`):

```auto
FROM logs
| WHERE message : "this is a test"

```

También se puede utilizar `qstr` para realizar consultas complejas que incluyan varios campos y condiciones:

```auto
FROM emails
| WHERE qstr("subject:(new york city) OR text:(big apple)")

```

`qstr` también permite realizar [búsqueda difusa (fuzzy)](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html):

```auto
FROM emails
| WHERE qstr("subject: york~2")

```

Seguiremos incluyendo nuevas funcionalidades a las funciones de búsqueda de texto completo, ¡mantente informado!

**¡Pruébalo!**

Hay varias formas de realizar filtrados de texto en ES|QL para encontrar tus datos. Ya sea coincidencia exacta, patrones, o búsqueda de texto completo, ES|QL tiene todo lo que necesitas.

Empieza a buscar en tus textos con ES|QL, y ¡cuéntanos tu opinión!
