Todos os produtos
Search
Central de documentação

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

Última atualização: Jul 03, 2026

Utilize a função search() para executar buscas de texto completo em dados de log dentro de instruções analíticas SQL.

Pré-requisitos

Exemplos

Combinação com predicados SQL

Combine search() com predicados SQL usando AND para obter uma filtragem mais precisa.

-- 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
  • Apenas o operador AND pode conectar search() a outros predicados SQL.

  • É proibido usar search() em qualquer expressão OR. Por exemplo, search('error') OR status = 500 não é permitido.

  • O uso de OR é permitido entre predicados SQL que não incluam search(). Por exemplo, search('error') AND (status = 500 OR status = 502) é válido.

Cenários de JOIN com múltiplas tabelas

A função search() suporta JOINs entre vários LogStores. Cada subconsulta aplica seu próprio filtro search() de forma independente.

Nota

Cada subconsulta pode conter apenas uma chamada de search(). Um JOIN de múltiplas tabelas pode ter várias chamadas de search(), pois cada search() pertence a uma subconsulta diferente.

Dados de amostra

Os exemplos a seguir utilizam uma tabela de pedidos (LogStore orders) e uma tabela de usuários (LogStore users).

Esquema da tabela de pedidos (LogStore orders):

Nome do campo

Tipo do campo

Descrição

order_id

long

ID do pedido

user_id

long

ID do usuário, associado à tabela de usuários

status

text

Status do pedido, como concluído, pendente ou cancelado

amount

double

Valor do pedido

order_type

text

Tipo de pedido, como normal ou vip

Esquema da tabela de usuários (LogStore users):

Nome do campo

Tipo do campo

Descrição

user_id

long

ID do usuário, chave primária

username

text

Nome de usuário

region

text

Região onde o usuário está localizado, como hangzhou, shanghai ou beijing

email

text

E-mail do usuário

age

long

Idade do usuário

INNER JOIN

Consulte pedidos concluídos (status = completed) com usuários correspondentes na região de 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

Retorne todos os pedidos concluídos e associe apenas usuários da região de shanghai. Pedidos sem um usuário correspondente exibirão null nos campos relacionados ao usuário.

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

Em um self-join, aplique condições de busca diferentes às subconsultas com aliases distintos.

O exemplo abaixo usa uma tabela de funcionários (LogStore employees) com este esquema:

Nome do campo

Tipo do campo

Descrição

employee_id

long

ID do funcionário

employee_name

text

Nome do funcionário

department

text

Departamento, como engineering ou finance

level

text

Nível, como junior ou senior

manager_id

long

O employee_id do gerente

Consulte funcionários do departamento de engenharia juntamente com seus gerentes de nível sênior:

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

Limites

Limite

Descrição

Limite por instância única

Cada subconsulta pode conter apenas uma chamada de search(). Para aplicar múltiplas condições, combine-as em uma única chamada de search(), por exemplo, search('error AND timeout').

Limite do operador OR

Não é possível combinar search() com OR no nível SQL. O operador OR é suportado dentro da função de busca, por exemplo, search('error OR warning').

Limite do modo de varredura

A função de busca não é suportada no modo de varredura.

Conflito de entrada de sintaxe de consulta

O uso de search() não é suportado quando a entrada de sintaxe de consulta contém condições de filtro. A função opera somente quando a entrada de consulta está vazia ou é *.

Tipo de parâmetro

O parâmetro da função de busca deve ser uma string literal. Valores dinâmicos, como referências de colunas, variáveis ou expressões de função, não são suportados.

Limites de uso combinado

Cenário

Suportado

Exemplo

Função de busca única

Suportado

WHERE search('error AND timeout')

search + AND + condição SQL

Suportado

WHERE search('error') AND status = 500

search + AND + (c1 OR c2)

Suportado

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

Operador OR usado dentro de search

Suportado

WHERE search('error OR warning')

search em cada subconsulta de um JOIN de múltiplas tabelas

Suportado

Cada subconsulta opera independentemente, sem afetar as outras.

Múltiplas funções search na mesma subconsulta

Não suportado

Não suportadoWHERE search('error') AND search('timeout')

Em vez disso, use WHERE search('error AND timeout').

search + OR + condição SQL

Não suportado

Não suportadoWHERE search('error') OR status = 500

Melhores práticas

  • Consolide as condições de consulta: Reúna todas as condições de busca de texto completo em uma única chamada de search(). Múltiplas chamadas de search() na mesma subconsulta não são suportadas.

  • Prefira consultas específicas por campo: Utilize o formato field: value em vez de busca genérica de texto completo para melhorar a precisão e o desempenho.

  • Aproveite tipos numéricos: Para campos long ou double, utilize consultas de intervalo (field in [min max]) em vez de correspondência de texto.

  • Especifique caminhos de subcampos para campos JSON: Defina um caminho preciso de subcampo, como content.status, para evitar correspondências difusas no nível pai.

  • Combine predicados SQL de forma eficaz: Use search() para filtragem de texto completo e predicados SQL para comparações numéricas. A combinação com AND garante tanto desempenho quanto flexibilidade.

Perguntas frequentes

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

O campo consultado não possui índice de campo. Verifique sua configuração de índice e crie um índice de campo para este campo específico.

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

Existem múltiplas chamadas de search() na mesma subconsulta. Consolide-as em uma única chamada; por exemplo, altere search('error') AND search('timeout') para search('error AND timeout').

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

A função search() está conectada a outras condições via OR. Mova a lógica OR para dentro da função de busca. Por exemplo, altere search('error') OR status = 500 para search('error OR status: 500').

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

O modo de varredura não suporta search(). Mude para o modo de índice para utilizar esta função.