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 中执行此操作的正确方法是什么?
这可以通过多索引搜索来实现,这是 Elasticsearch 的内置功能。为了实现所描述的行为,应该尝试这样的查询:
\n\nPOST /index_2019_01,index_2019_02/_search\n{\n "query": {\n "match": {\n "LanguageID": "English"\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n或者,使用URI 搜索:
\n\ncurl \'http://<host>:<port>/index_2019_01,index_2019_02/_search?q=LanguageID:English\'\nRun Code Online (Sandbox Code Playgroud)\n\n更多详细信息请参见此处。请注意,Elasticsearch 要求索引名称为小写。
\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\nPOST /_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}\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n希望有帮助!
\n