You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch SQL中能否过滤DESCRIBE/SHOW COLUMNS的输出结果?

问题

我用下面的Elasticsearch SQL查询获取索引结构:

GET /_sql?format=txt
{
  "query" :"""
    DESCRIBE "index_name"
  """
}

这个查询能正常执行,输出如下:

column                      | type          | mapping    
-----------------------------------------------------------
column_name1                    | STRUCT        | object         
column_name1.Id                 | VARCHAR       | text           
column_name1.Id.keyword         | VARCHAR       | keyword 

请问能不能通过filter或WHERE子句对上述查询的输出进行过滤?比如下面两种写法是否可行:

写法一:

GET /_sql?format=txt
{
  "query":"""
  DESCRIBE "index_name"
  """,
  "filter": {"terms": {"type.keyword": ["STRUCT"]}}
}

写法二:

GET /_sql?format=txt
{
  "query":"""
  DESCRIBE "index_name"
  WHERE "type" = 'STRUCT'
  """
}
解答

你给出的两种写法都不可行,原因如下:

  1. 写法一(带filter参数):filter参数是Elasticsearch SQL中针对索引文档数据的过滤条件,仅作用于实际存储的文档内容;而DESCRIBE返回的是索引元数据,不属于文档范畴,所以这个filter不会对结果产生任何影响。
  2. 写法二(DESCRIBE加WHERE子句):Elasticsearch SQL的DESCRIBE语句语法不支持直接追加WHERE子句,这样写会触发语法错误。

如果需要过滤索引结构的输出,可以改用查询information_schema.columns系统表的方式——这是Elasticsearch SQL中获取元数据的标准方式,支持WHERE过滤:

GET /_sql?format=txt
{
  "query":"""
    SELECT column_name, data_type, type_name 
    FROM information_schema.columns 
    WHERE table_name = 'index_name' AND data_type = 'STRUCT'
  """
}

这个查询会返回指定索引中类型为STRUCT的列信息,完全符合你想要的过滤需求。

内容的提问来源于stack exchange,提问作者Przemek Nawrocki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:30:44