索引模式编辑

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

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

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