我在Elasticsearch数据库中有几个索引,如下所示
Index_2019_01
Index_2019_02
Index_2019_03
Index_2019_04
.
.
Index_2019_12
字符串
假设我只想搜索前3个索引。我的意思是一个像这样的正则表达式:
select count(*) from Index_2019_0[1-3] where LanguageId="English"
型
在Elasticsearch中正确的方法是什么?
我在Elasticsearch数据库中有几个索引,如下所示
Index_2019_01
Index_2019_02
Index_2019_03
Index_2019_04
.
.
Index_2019_12
字符串
假设我只想搜索前3个索引。我的意思是一个像这样的正则表达式:
select count(*) from Index_2019_0[1-3] where LanguageId="English"
型
在Elasticsearch中正确的方法是什么?
4条答案
按热度按时间i2loujxw1#
如何查询多个同名索引?
这可以通过多索引搜索来实现,这是Elasticsearch的内置功能。为了实现所描述的行为,应该尝试这样的查询:
字符串
或者,使用URI search:
型
更多详情请访问here。请注意,Elasticsearch要求索引名称为小写。
可以使用正则表达式指定索引名模式吗?
简而言之,没有。可以在查询中使用特殊的“虚拟”字段
_index
来使用索引名称,但其使用受到限制。例如,不能对索引名称使用regexp:_index被公开为一个虚拟字段 -- 它不会作为一个真实的字段添加到Lucene索引中。这意味着您可以在一个或多个术语查询(或任何重写为术语查询的查询,如match、query_string或simple_query_string查询)中使用_index字段,但它不支持前缀、通配符、regexp或模糊查询。
例如,上面的查询可以重写为:
型
它使用bool和terms查询。
希望有帮助!
jgwigjjp2#
为什么使用POST,当你不添加任何额外的数据。我建议在你的情况下使用GET。其次,如果索引具有类似的名称,如在您的情况下,您应该使用如下查询中的索引模式,
字符串
或在URL中
型
pkmbmrz73#
虽然使用正则表达式搜索索引是不可能的,但您可能可以使用日期数学来更进一步。
您可以查看文档here
例如,假设您希望从这些指数中获得过去3个月的数据,这意味着如果我们有index_2019_01
2019_02
2019_03
2019_04
今天是2019/04/20,我们可以使用以下查询来获得04,03和02
字符串
我对第一个索引使用了M-0M,这样查询构造循环就不需要第一个索引的特殊情况
查看有关URL编码此查询以及如何在索引名称中使用文字括号的文档,如果使用客户端,则URL编码已为您完成(至少在python客户端中)
eit6fx6z4#
使用正则表达式来搜索索引名称可能是不可能的,正如在这个问题的另一篇文章中列出的那样,但是可以使用通配符通过indexs.get请求来搜索索引,比如
GET /index-prefix*
。参见此处的文档