数据类型
编辑数据类型
编辑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
,不用于排序或聚合,因为它们的实际值取决于使用的 analyzer
,因此 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
多字段以进行精确匹配。