Elasticsearch 查询名称与特定模式匹配的索引

m.r*_*226 6 regex database elasticsearch elasticsearch-dsl

我的 Elasticsearch 数据库中有几个索引,如下所示

Index_2019_01

Index_2019_02

Index_2019_03

Index_2019_04

.
.

Index_2019_12
Run Code Online (Sandbox Code Playgroud)

假设我只想搜索前 3 个索引。我的意思是像这样的正则表达式:

select count(*) from Index_2019_0[1-3] where LanguageId="English"
Run Code Online (Sandbox Code Playgroud)

在 Elasticsearch 中执行此操作的正确方法是什么?

Nik*_*iev 2

如何查询多个具有特定名称的索引?

\n\n

这可以通过多索引搜索来实现,这是 Elasticsearch 的内置功能。为了实现所描述的行为,应该尝试这样的查询:

\n\n
POST /index_2019_01,index_2019_02/_search\n{\n  "query": {\n    "match": {\n      "LanguageID": "English"\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者,使用URI 搜索

\n\n
curl \'http://<host>:<port>/index_2019_01,index_2019_02/_search?q=LanguageID:English\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

更多详细信息请参见此处。请注意,Elasticsearch 要求索引名称为小写。

\n\n

我可以使用正则表达式来指定索引名称模式吗?

\n\n

简而言之,不。可以在使用特殊“虚拟”字段的查询中使用索引名称,_index但其使用受到限制。例如,不能对索引名称使用正则表达式:

\n\n
\n

_index 作为虚拟字段公开\xe2\x80\x89\xe2\x80\x94\xe2\x80\x89,它不会作为真实字段添加到\n Lucene 索引中。这意味着您可以在术语或术语查询(或重写为术语查询的任何查询,例如 match、query_string 或 simple_query_string 查询)中使用 _index\n 字段,但它不支持前缀、通配符、正则表达式或模糊\n 查询。

\n
\n\n

例如,上面的查询可以重写为:

\n\n
POST /_search\n{\n  "query": {\n    "bool": {\n      "must": [\n        {\n          "terms": {\n            "_index": [\n              "index_2019_01",\n              "index_2019_02"\n            ]\n          }\n        },\n        {\n          "match": {\n            "LanguageID": "English"\n          }\n        }\n      ]\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

其中使用了boolterms查询。

\n\n

希望有帮助!

\n