数据类型
编辑数据类型
编辑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 的核心概念是已分析
字段,即为了有效索引而解释的全文值。这些字段的类型为 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
多字段进行精确匹配。