数据类型
编辑数据类型编辑
Elasticsearch 类型 |
Elasticsearch SQL 类型 |
SQL 类型 |
SQL 精度 |
核心类型 |
|||
|
NULL |
0 |
|
|
BOOLEAN |
1 |
|
|
TINYINT |
3 |
|
|
SMALLINT |
5 |
|
|
INTEGER |
10 |
|
|
BIGINT |
19 |
|
|
BIGINT |
20 |
|
|
DOUBLE |
15 |
|
|
REAL |
7 |
|
|
FLOAT |
3 |
|
|
DOUBLE |
15 |
|
|
VARCHAR |
32,766 |
|
|
VARCHAR |
2,147,483,647 |
|
|
VARBINARY |
2,147,483,647 |
|
|
TIMESTAMP |
29 |
|
|
VARCHAR |
39 |
|
|
VARCHAR |
32,766 |
|
复杂类型 |
|||
|
STRUCT |
0 |
|
|
STRUCT |
0 |
|
不支持的类型 |
|||
上面未提及的类型 |
|
OTHER |
0 |
显然,并非所有 Elasticsearch 类型在 SQL 中都有等效类型,反之亦然,因此 Elasticsearch SQL 使用前者的数据类型特性而不是后者,因为 Elasticsearch 最终是后端存储。
除了上述类型之外,Elasticsearch SQL 还支持在运行时特定于 SQL 的类型,这些类型在 Elasticsearch 中没有等效类型。这些类型无法从 Elasticsearch 加载(因为它不知道它们),但可以在 Elasticsearch SQL 中的查询或其结果中使用。
SQL 类型 |
SQL 精度 |
|
29 |
|
18 |
|
7 |
|
7 |
|
23 |
|
23 |
|
23 |
|
23 |
|
7 |
|
23 |
|
23 |
|
23 |
|
23 |
|
23 |
|
23 |
|
52 |
|
2,147,483,647 |
|
2,147,483,647 |
SQL 和多字段编辑
Elasticsearch 中的一个核心概念是 analyzed
字段,它是一个用于有效索引的全文值。这些字段的类型为 text
,不适用于排序或聚合,因为它们的实际值取决于所使用的 分析器
,因此 Elasticsearch 还提供 keyword
类型用于存储精确值。
在大多数情况下,实际上也是默认情况下,是使用字符串的两种类型,Elasticsearch 通过 多字段 支持这一点,即能够以多种方式索引相同的字符串;例如,将其索引为 text
用于搜索,但也将其索引为 keyword
用于排序和聚合。
由于 SQL 需要精确值,因此在遇到 text
字段时,Elasticsearch SQL 将搜索它可以用于比较、排序和聚合的精确多字段。为此,它将搜索它可以找到的第一个未规范化的 keyword
,并将其用作原始字段的精确值。
考虑以下 string
映射
{ "first_name": { "type": "text", "fields": { "raw": { "type": "keyword" } } } }
以下 SQL 查询
SELECT first_name FROM index WHERE first_name = 'John'
与以下查询相同
SELECT first_name FROM index WHERE first_name.raw = 'John'
因为 Elasticsearch SQL 自动从 raw
中选择 raw
多字段以进行精确匹配。