多元索引支持丰富的日期时间(Date)类型,您可以将数据表中整型(Integer)或者字符串(String)类型的数据在多元索引中映射为日期数据类型。当通过多元索引进行范围查询时,使用日期数据类型查询会比使用字符串类型查询更快。
精度和范围
日期时间类型支持的最大精度是纳秒,日期时间类型数据的取值范围为["1970-01-01 00:00:00.000000000", "2262-04-11 23:47:16.854775807"]
。
日期格式
当数据表中的Integer或String类型映射到多元索引的Date类型时,日期时间类型的格式支持进行设置,详细说明请参见下表。
数据表中字段类型 | 多元索引中日期时间类型的格式(Format) |
整型(Integer) | 支持选择预定义格式。预定义格式包括如下选项:
|
字符串(String) | 支持自定义格式。常用日期格式如下:
其中yyyy表示4位的年份,MM表示月份,dd表示天,HH表示24小时制,mm表示分钟,ss表示秒,SSS表示秒的精度,X表示时区偏移量。 关于自定义日期格式规则的更多信息,请参见自定义日期格式规则。 |
自定义日期格式规则
符号 | 含义 | 示例 |
y | 年份 |
|
M | 月份 |
|
d | 月分中的第几天 |
|
a | 上午(AM)或者下午(PM)标记 |
|
K | AM或者PM中的小时,取值范围为0~11 |
|
H | 一天中的小时,取值范围为0~23 |
|
m | 分钟 |
|
s | 秒 |
|
S | 秒的精度,支持1~9个数字 |
|
X | 时区偏移 |
|
x | 时区偏移 |
|
' | 自定义符号限定符 | A~Z和a~z字符为特殊符号,当添加自定义字符串时,需要使用单引号包括。 重要 空格和短划线(-)不需要使用单引号包括。 |
'' | 转义单引号 | '' |
日期格式合法性验证
使用日期格式查询数据前,建议您通过多元索引的精确查询(TermQuery)或者JDK8及以上版本的DateTimeFormatter方式验证日期格式的合法性。
通过TermQuery进行验证
创建包含指定日期格式的多元索引后,使用精确查询(TermQuery)进行日期格式的合法性验证。如果代码执行不报错,则日期格式正确。
public void testDateFormat(SyncClient client, String tableName, String indexName) {
// 创建多元索引。
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(indexName);
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
new FieldSchema("col_date", FieldType.DATE)
.setIndex(true)
.setEnableSortAndAgg(true)
.setDateFormats(Arrays.asList("yyyy-MM-dd HH:mm:ss.SSS"))
));
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);
// 验证日期格式。如果查询不报错,则日期格式正确。
client.search(SearchRequest.newBuilder()
.tableName(tableName)
.indexName(indexName)
.searchQuery(SearchQuery
.newBuilder()
.query(QueryBuilders.term("col_date", "2022-12-12 12:10:03.123")).build())
.build());
}
通过DateTimeFormatter进行验证
此方式在测试某些时区时可能存在误差。
请确保已安装JDK8及以上版本的开发环境。
通过JDK的DateTimeFormatter方法验证日期类型的合法性。如果代码执行不报错,则日期格式正确。
import java.time.format.DateTimeFormatter;
public void testFormatByJdk8() {
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS").parse("2022-12-12 12:10:03.123");
}
相关文档
当要使用日期时间类型时,您可以通过控制台或者SDK方式在创建多元索引时配置日期时间类型的字段。具体操作,请参见创建多元索引。
多元索引查询类型包括精确查询、多词精确查询、全匹配查询、匹配查询、短语匹配查询、前缀查询、范围查询、通配符查询、模糊查询、多条件组合查询、地理位置查询、嵌套类型查询、向量检索介绍与使用和列存在性查询,您可以选择合适的查询类型进行多维度数据查询。
如果要对结果集进行排序或者翻页,您可以使用排序和翻页功能来实现。具体操作,请参见排序和翻页。
如果要按照某一列对结果集做折叠,使对应类型的数据在结果展示中只出现一次,您可以使用折叠(去重)功能来实现。具体操作,请参见折叠(去重)。
如果要进行数据分析,例如求最值、求和、统计行数等,您可以使用Search接口的统计聚合功能或者SQL查询来实现。具体操作,请参见统计聚合和SQL查询。
如果要快速导出数据,而不关心整个结果集的顺序时,您可以使用ParallelScan接口和ComputeSplits接口实现多并发导出数据。具体操作,请参见并发导出数据。