Todos los productos
Search
Centro de documentos

Simple Log Service:Full-text search using the search() function

Última actualización: Sep 02, 2026

Utilice la función search() para realizar búsquedas de texto completo sobre datos de registro en instrucciones de análisis SQL.

Requisitos previos

Ejemplos

Combinación con predicados SQL

Combine search() con predicados SQL mediante AND para lograr un filtrado más preciso.

-- search + comparison operator
* | SELECT * FROM log
  WHERE search('status: 200') AND request_time > 100

-- search + IN clause
* | SELECT * FROM log
  WHERE search('request_method: GET') AND status IN (200, 301, 302)

-- search + LIKE
* | SELECT * FROM log
  WHERE search('status: 200') AND http_user_agent LIKE '%Chrome%'

-- search + BETWEEN
* | SELECT * FROM log
  WHERE search('request_method: POST') AND request_time BETWEEN 100 AND 500

-- search + complex condition combination (OR cannot include search)
* | SELECT * FROM log
  WHERE search('request_method: GET')
    AND (status = 200 OR status = 302)
    AND request_time > 50
  • Solo AND puede conectar search() con otros predicados SQL.

  • search() no puede aparecer en ninguna expresión OR. Por ejemplo, search('error') OR status = 500 no está permitido.

  • Se permite OR entre predicados SQL que no incluyen search(). Por ejemplo, search('error') AND (status = 500 OR status = 502) sí está permitido.

Escenarios de JOIN de varias tablas

search() admite operaciones JOIN con varios logstores. Cada subconsulta aplica su propio filtro search() de forma independiente.

Nota

Cada subconsulta solo puede contener una llamada a search(). Un JOIN de varias tablas puede tener múltiples llamadas a search() porque cada search() pertenece a una subconsulta distinta.

Datos de muestra

Los siguientes ejemplos utilizan una tabla de pedidos (logstore orders) y una tabla de usuarios (logstore users).

Esquema de la tabla de pedidos (logstore orders):

Nombre del campo

Tipo de campo

Descripción

order_id

long

ID del pedido

user_id

long

ID de usuario, asociado a la tabla de usuarios

status

text

Estado del pedido, como completado, pendiente o cancelado

amount

double

Monto del pedido

order_type

text

Tipo de pedido, como normal o vip

Esquema de la tabla de usuarios (logstore users):

Nombre del campo

Tipo de campo

Descripción

user_id

long

ID de usuario, clave principal

username

text

Nombre de usuario

region

text

Región donde se encuentra el usuario, como hangzhou, shanghai o beijing

email

text

Correo electrónico del usuario

age

long

Edad del usuario

INNER JOIN

Consulte los pedidos completados (status = completed) con usuarios correspondientes en la región hangzhou.

* | SELECT o.order_id, o.status, o.amount, u.username, u.region
    FROM (
        SELECT * FROM orders.log
        WHERE search('status: completed')
    ) o
    JOIN (
        SELECT * FROM users.log
        WHERE search('region: hangzhou')
    ) u
    ON o.user_id = u.user_id
    ORDER BY o.order_id

LEFT JOIN

Devuelva todos los pedidos completados y asocie solo los usuarios de la región shanghai. Los pedidos sin un usuario correspondiente muestran null en los campos relacionados con el usuario.

* | SELECT o.order_id, o.status, u.username, u.region
    FROM (
        SELECT * FROM orders.log
        WHERE search('status: completed')
    ) o
    LEFT JOIN (
        SELECT * FROM users.log
        WHERE search('region: shanghai')
    ) u
    ON o.user_id = u.user_id
    ORDER BY o.order_id

Self-join

En un self-join, aplique condiciones de búsqueda diferentes a subconsultas con alias distintos.

El siguiente ejemplo utiliza una tabla de empleados (logstore employees) con este esquema:

Nombre del campo

Tipo de campo

Descripción

employee_id

long

ID del empleado

employee_name

text

Nombre del empleado

department

text

Departamento, como engineering o finance

level

text

Nivel, como junior o senior

manager_id

long

El employee_id del gerente

Consulte los empleados del departamento de ingeniería junto con sus gerentes de nivel senior:

* | SELECT e.employee_name AS employee, e.department,
           m.employee_name AS manager, m.level AS manager_level
    FROM (
        SELECT * FROM employees.log
        WHERE search('department: engineering')
    ) e
    JOIN (
        SELECT * FROM employees.log
        WHERE search('level: senior')
    ) m
    ON e.manager_id = m.employee_id
    ORDER BY e.employee_name

Límites

Límite

Descripción

Límite por instancia única

Cada subconsulta solo puede contener una llamada a search(). Para aplicar varias condiciones, combínelas en una sola llamada a search(); por ejemplo, search('error AND timeout').

Límite del operador OR

search() no se puede combinar con OR a nivel de SQL. El operador OR sí se admite dentro de la función search; por ejemplo, search('error OR warning').

Límite del modo de escaneo

La función search no es compatible con el modo de escaneo.

Conflicto en la entrada de sintaxis de consulta

search() no se admite cuando la entrada de sintaxis de consulta contiene condiciones de filtro. La función solo opera si la entrada de consulta está vacía o es *.

Tipo de parámetro

El parámetro de la función search debe ser una cadena literal. No se admiten valores dinámicos como referencias a columnas, variables o expresiones de función.

Límites de uso combinado

Escenario

Compatible

Ejemplo

Función search única

Compatible

WHERE search('error AND timeout')

search + AND + condición SQL

Compatible

WHERE search('error') AND status = 500

search + AND + (c1 OR c2)

Compatible

WHERE search('error') AND (status = 500 OR status = 502)

Operador OR usado dentro de search

Compatible

WHERE search('error OR warning')

search en cada subconsulta de un JOIN de varias tablas

Compatible

Cada subconsulta opera de forma independiente, sin afectar a las demás.

Varias funciones search en la misma subconsulta

No compatible

No compatibleWHERE search('error') AND search('timeout')

En su lugar, utilice WHERE search('error AND timeout').

search + OR + condición SQL

No compatible

No compatibleWHERE search('error') OR status = 500

Mejores prácticas

  • Consolide las condiciones de consulta: Combine todas las condiciones de búsqueda de texto completo en una sola llamada a search(). No se admiten múltiples llamadas a search() en la misma subconsulta.

  • Utilice consultas específicas por campo: Emplee el formato field: value en lugar de búsquedas generales de texto completo para mejorar la precisión y el rendimiento.

  • Aproveche los tipos numéricos: Para campos long o double, use consultas de rango (field in [min max]) en lugar de coincidencias de texto.

  • Use rutas de subcampos para campos JSON: Especifique una ruta de subcampo precisa, como content.status, para evitar coincidencias difusas en el nivel principal.

  • Combine predicados SQL de manera eficaz: Utilice search() para el filtrado de texto completo y predicados SQL para comparaciones numéricas. Combínelos con AND para obtener tanto rendimiento como flexibilidad.

Preguntas frecuentes

Error: key (xxx) is not config as key value config

El campo consultado no tiene índice de campo. Revise su configuración de índices y cree un índice de campo para este campo.

Error: Multiple search() functions in a single query are not supported

Existen múltiples llamadas a search() en la misma subconsulta. Combínelas en una sola llamada; por ejemplo, cambie search('error') AND search('timeout') por search('error AND timeout').

Error: The search() function cannot be combined with OR operator

search() está conectado a otras condiciones mediante OR. Mueva la lógica OR dentro de la función search. Por ejemplo, cambie search('error') OR status = 500 por search('error OR status: 500').

Error: The search() function is not supported in scan mode

El modo de escaneo no admite search(). Cambie al modo de índice para utilizar esta función.