text_search表函数
本文介绍text_search函数的语法规则,包括参数解释、函数示例等。text_search函数是云日志服务(LTS)提供的表函数,用于关键词检索日志数据。
参数解释
该函数允许用户通过指定关键词查询条件,快速检索符合条件的日志记录,同时返回完整的表结构数据。
语法:text_search(index, query)
| 参数名称 | 描述 | 类型 | 是否必选 |
|---|---|---|---|
| index | 索引名称(表名),指定要查询的日志流名称,当前默认值'log'。 | VARCHAR | 是 |
| query | 关键词查询语句,跟日志搜索语法相同。 | VARCHAR | 是 |
- 索引名称:index参数必须是'log',暂不支持其他写法。
- 查询语句:query参数需遵循LTS日志搜索语法,语法错误会导致查询失败。
返回值:返回指定日志流对应的表结构,包含该表的所有列和日志搜索过滤后的数据行。
示例1:基础关键词检索
查询包含 "error" 关键词的日志记录:
SELECT * FROM table(text_search(index =>'log', query => 'error')) LIMIT 100;
等同于如下方式:
error | SELECT * FROM log LIMIT 100;
- index参数为'log',表示查询当前日志流
- query参数为'error',检索所有包含'error'关键词的日志。
- 返回该表的所有字段(如timestamp,level,message,host等)。
- 使用LIMIT 100限制返回结果数量,避免数据量过大。
查询分析结果
timestamp | level | message | host -------------------|--------|--------------------------------|------ 2024-01-01 10:00:00| ERROR | Connection timeout error | host1 2024-01-01 11:30:00| ERROR | Database connection failed | host2
示例2:join场景中使用
先从全量日志检索出所有日志级别为ERROR的trace_id,再从全量日志中找出包含这些trace_id的日志,只展示trace_id和message,最多返回1000条。
SELECT trace_id, message from log where trace_id in (SELECT distinct trace_id FROM table(text_search(index =>'log', query => 'level:ERROR'))) limit 1000
- query参数为 'level:ERROR'。
- in相当于join操作,等价 SELECT t.trace_id,t.message FROM log t INNER JOIN (SELECT DISTINCT trace_id FROM table(text_search(index =>'log', query => 'level:ERROR'))) err ON t.trace_id=err.trace_id LIMIT 1000。
查询分析结果
trace_id | message ----------|-------------------------------- xxxx_xxxx1| access memory xxxx_xxxx1| Memory allocation failed
性能优化建议
- 限制结果数量:使用LIMIT子句避免返回过多数据。
SELECT * FROM Table(text_search(index =>'log', query => 'level:ERROR')) LIMIT 1000;
- 精确字段选择:只选择需要的字段,减少数据传输。
SELECT message FROM Table(text_search(index =>'log', query => 'ERROR'));
- 优化查询条件:使用Lucene语法进行预筛选,减少后端处理压力。
-- 使用字段匹配而非全文检索 text_search(index =>'log', query => 'level:ERROR') -- 高效 text_search(index =>'log', query => 'ERROR') -- 较慢(全文扫描)