您在创建索引时,可将字段的数据类型设置为text、long、double或JSON。本文介绍各个数据类型的配置示例及注意事项。
数据类型概述
在创建索引时,推荐使用控制台方式创建索引,日志服务会根据采集时预览数据中的第一条内容,自动生成字段索引,同时也支持自定义字段索引。
日志服务提供如下数据类型,请按情况进行选择:
-
text、long、double类型:
-
如果您要查询和分析字符串类型的字段,需在配置索引时,将字段的数据类型设置为text,并开启统计功能。
说明text、long 和 double 类型的字段均可独立开启统计功能。只有开启统计功能后,该字段才能用于 SQL 查询中的 WHERE 条件过滤、聚合分析(SELECT/GROUP BY)以及可视化展示。若未开启统计,字段在 SQL 查询分析中可能无法提取或返回 null。
在控制台键值索引属性配置界面中,每个字段行均有一个开启统计开关,text/long/double 三种类型均可独立开启,不随字段类型变化而隐藏。
-
只有字段的数据类型为long或double时,您才能通过数值范围查询该字段的值,但不支持使用星号(*)或半角问号(?)进行模糊查询。
-
如果日志字段的值为整数类型,请将字段的数据类型设置为long。
-
如果日志字段的值为浮点数类型,请将字段的数据类型设置double,否则无法查询该字段。
-
如果设置数据类型为long或double,而实际字段值为字符串类型,则无法查询该字段。
重要如果字段的值为非法的数值,则使用not key > -1000000语句进行查询,表示查询所有有效数值之外的日志,其中-1000000为足够小的值即可。
-
-
-
JSON类型:字段的值为JSON类型,您可在配置索引时,将字段的数据类型设置为JSON。
-
针对JSON对象中的字段,您可根据其值,将数据类型设置为long、double或text,并开启统计功能。开启统计功能后,日志服务支持您查询和分析JSON对象中的字段。
通过选中对Json内所有文本字段自动索引,可实现JSON对象中的所有文本字段自动创建索引。创建索引后,将产生索引流量。

-
针对非完全合法的JSON数据,日志服务支持解析合法部分。
例如以下为非完整的JSON日志,日志服务可正确解析content.remote_addr字段、content.request.request_length字段和content.request.request_method字段。
content: { remote_addr:"192.0.2.0" request: { request_length:"73" request_method:"GE重要-
日志服务支持JSON对象中的叶子节点建立索引,但不支持包含叶子节点的子节点建立索引。
-
日志服务不支持值为JSON数组的字段建立索引,也不支持JSON数组中的字段建立索引。
-
如果字段的值为Boolean类型,则您可以在建立索引时,将字段的数据类型设置为text。
-
查询和分析语句格式为
查询语句|分析语句。在分析语句中,您必须使用双引号("")包裹字段名称,使用单引号('')包裹字符串。
-
-
更多参考信息
-
关于查询和分析JSON日志的更多操作场景和常见问题,包括设置索引、查询和分析具有索引的JSON字段、使用JSON函数、分析JSON数组等,请参见查询和分析JSON日志的常见问题。
-
查询和分析JSON日志相关的基础配置和基本用法,请参见查询和分析JSON日志。
-
在查询和分析JSON日志时,如果数据量比较小,您可以不对JSON叶子节点建立字段索引,而是使用JSON函数进行查询和分析。另外,针对一些特殊情况,只能使用JSON函数进行查询与分析。相关案例,请参见何时使用JSON函数。关于JSON函数的完整介绍和案例,请参见JSON函数。
-
-
操作步骤
-
在创建索引中按照控制台方式进行索引创建。
-
在配置索引中选择对应的索引类型。
text、long、double类型
-
日志样例

-
配置索引

-
查询和分析语句示例
-
查询请求时间大于60秒的日志:
request_time > 60。 -
查询请求时间大于等于60秒,并且小于200秒的日志:
request_time in [60 200)或者request_time >= 60 and request_time < 200。 -
查询请求状态码为200的日志:
status = 200。 -
查询非GET请求的日志:
not request_method : GET。 -
查询以cn开头的日志:
cn*。 -
统计客户端分布情况:
* | SELECT ip_to_province(client_ip) as province, count(*) AS pv GROUP BY province ORDER BY pv。
-
JSON类型
-
日志样例
JSON日志样例如下所示,除日志服务保留字段外,还包括class字段、latency字段、status字段和info字段。其中info字段的值是JSON对象,并存在多层嵌套。

-
配置索引

相关说明如下:
-
IP字段和data字段的值为JSON数组,所以您无法为IP字段和data字段建立索引,也无法通过这两个字段进行查询和分析。
-
region字段和CreateTime字段在JSON数组中,所以您无法为region字段和CreateTime字段建立索引,也无法通过这两个字段进行查询和分析。
-
-
查询和分析语句示例
-
查询usedTime字段的值大于60秒的日志:
info.usedTime > 60。 -
查询success字段的值为true的日志:
info.success : true。 -
查询usedTime字段的值大于60秒且projectName的值不为project01的日志:
info.usedTime > 60 not info.param.projectName : project01。 -
计算获取Project信息的平均时长:
methodName = getProjectInfo | SELECT avg("info.usedTime") AS avg_time。
-
-
在配置索引时,请注意以下规则:
-
全文索引属性和键值索引属性必须至少启用一种。
-
字段索引配置会覆盖全文索引中同名字段的设置。例如,全文索引中已对某个字段进行分词检索,如果在键值索引中对该字段单独配置了类型和属性,则以键值索引中的配置为准。
-
索引类型为 long/double 时,大小写敏感和分词符属性无效。
-
目前只支持缩短索引保存时间。
-
索引配置修改(包括新增字段、修改类型、开启统计/查询开关等)后约 1 分钟生效,但仅对索引生效后写入的新数据可查询。如需查询历史数据,需对历史数据执行重建索引操作。具体操作请参见重建索引。
-
重建索引仅支持最近 30 天且至少 15 分钟前的数据。