索引模式

编辑

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