索引模式
Elastic Stack Serverless
Elasticsearch SQL 支持两种类型的模式来匹配多个索引或表
只要将 Elasticsearch 用于枚举、包含或排除 多目标语法 的表示法引用或转义为表标识符,即可支持该表示法。
例如
SHOW TABLES "*,-l*";
catalog | name | type | kind
---------------+---------------+----------+---------------
javaRestTest |emp |TABLE |INDEX
javaRestTest |employees |VIEW |ALIAS
请注意,该模式用双引号 "
包围。 它枚举了 *
,表示所有索引,但排除了(由于 -
)所有以 l
开头的索引。 此表示法非常方便且强大,因为它允许包含和排除,具体取决于目标命名约定。
相同类型的模式也可用于查询多个索引或表。
例如
SELECT emp_no FROM "e*p" LIMIT 1;
emp_no
---------------
10001
注意
存在一个限制,即所有解析的具体表都具有完全相同的映射。
[预览] 要运行 跨集群搜索,请使用 <remote_cluster>:<target>
语法指定集群名称,其中 <remote_cluster>
映射到 SQL 目录(集群),<target>
映射到表(索引或数据流)。 <remote_cluster>
支持通配符 (*
),并且 <target>
可以是索引模式。
例如
SELECT emp_no FROM "my*cluster:*emp" LIMIT 1;
emp_no
---------------
10001
常见的 LIKE
语句(包括根据需要进行转义)用于匹配基于一个 _
或多个 %
字符的通配符模式。
再次使用 SHOW TABLES
命令
SHOW TABLES LIKE 'emp%';
catalog | name | type | kind
---------------+---------------+----------+---------------
javaRestTest |emp |TABLE |INDEX
javaRestTest |employees |VIEW |ALIAS
该模式匹配所有以 emp
开头的表。
此命令也支持转义,例如
SHOW TABLES LIKE 'emp!%' ESCAPE '!';
catalog | name | type | kind
---------------+---------------+---------------+---------------
请注意,现在 emp%
不匹配任何表,因为 %
(表示匹配零个或多个字符)已被 !
转义,因此成为常规字符。 由于没有名为 emp%
的表,因此返回一个空表。
简而言之,两种类型的模式之间的区别在于
特性 | 多索引 | SQL LIKE |
---|---|---|
引用类型 | " |
' |
包含 | 是 | 是 |
排除 | 是 | 否 |
枚举 | 是 | 否 |
单字符模式 | 否 | _ |
多字符模式 | * |
% |
转义 | 否 | ESCAPE |
使用哪个取决于您,但为了保持一致性,请尽量在查询中使用相同的模式。
注意
由于两种模式之间的查询类型引用非常相似 ("
与 '
),因此 Elasticsearch SQL *始终* 需要关键字 LIKE
用于 SQL LIKE
模式。