索引模式

编辑

Elasticsearch SQL 支持两种模式来匹配多个索引或表

Elasticsearch 多目标语法

编辑

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

有一个限制,即所有解析的具体表都具有完全相同的映射。

[预览] 此功能处于技术预览阶段,可能会在未来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能的支持 SLA 的约束。 要运行 跨集群搜索,请使用 <remote_cluster>:<target> 语法指定集群名称,其中 <remote_cluster> 映射到 SQL 目录(集群),<target> 映射到表(索引或数据流)。<remote_cluster> 支持通配符 (*),<target> 可以是索引模式。

例如

SELECT emp_no FROM "my*cluster:*emp" LIMIT 1;

    emp_no
---------------
10001

SQL LIKE 表示法

编辑

常用的 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

使用哪种模式取决于您,但为了保持一致性,请尽量在您的查询中使用相同的模式。

由于两种模式之间的查询引用类型非常相似(" vs '),Elasticsearch SQL 始终需要关键字 LIKE 用于 SQL LIKE 模式。