前言
官网文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-index.html
官网文档其实很详细的,大家可能没有时间或精力去详细的阅读。
目前最新的是7.10,我使用的版本是7.8。
正文
多目标语法
大部分使用<data-stream>, <index>, <target>
的请求都支持多目标语法。
例如,我们可以传递多个索引: test1,test2,test3,也可以使用通配符(*)去匹配符合条件的目标,比如 test*
或者 *test
或者 te*t
或者 *test*
。同时可以使用-
来排除索引。
# 示例
# 存在 [{'index': 'test1','alias': 'testa'}, {'index': 'test2','alias': 'testb'}, {'index': 'test3','alias': 'testc'}]
# 具体排除某个索引
GET test*,-test2/_search
# 排除某一类索引
GET test*,-te*t2/_search
注意:
- 排除索引不能放在第一位,
GET -test2,test*/_search
这样的写法是错误的,会报index_not_found_exception,no such index [-test2]
。另外,排除的需要是前面包含的,否则也会报错。例GET test2,-test3/_search
这种也是错误的。 - 通配符和排除同时使用的时候,排除不能用别名。
GET test*,-testb/_search
这种还是会查询到test2里面的数据。 - Document APIs 和 single-index alias APIs 不支持多目标语法。
1)Document APIs 主要是 文档的相关请求,包含增删改查,批量请求,reindex请求。
官方文档
2)single-index alias APIs 主要是 POST /_aliases 请求,包含别名的增加移除等。
官方文档 - 默认情况下,通配符的索引不包含已隐藏的索引。如果要包含,可以使用参数
expand_wildcards
。 - 不建议直接访问或修改系统索引。
其它可选参数:
ignore_unavailable
(可选,布尔值)默认为false。如果为true,则响应中不包括缺少或闭合的索引。
举例:
GET test1,test4/_search
# 当test4不存在时,运行报错 index_not_found_exception,该参数可避免此报错
GET test1,test4/_search?ignore_unavailable=true
# 这个可以正常运行,并返回test1中的数据
allow_no_indices
(可选,布尔值)如果为false,则任何通配符表达式,索引别名或_all值仅以缺少或关闭的索引为目标时,请求将返回错误 。即使该请求针对其他打开的索引,此行为也适用。例如,foo*,bar*如果以foo开头的索引存在,但以bar开头的索引不存在,则请求定位将返回错误。
allow_no_indices 和 ignore_unavailable 的异同:
1.都是用来防止包含不存在索引或已关闭索引的错误。
2.ignore_unavailable的作用范围大,控制的是任何索引包括带通配符和不带通配符的,
allow_no_indices 控制的是带通配符,别名或_all的索引。
expand_wildcards
(可选,字符串)控制通配符表达式可以扩展到的索引类型。如用逗号分隔,则接受多个值 open,hidden。
有效值为:
值 | 解释 |
---|---|
all | open and closed indices, including hidden indices. |
open | open indices |
closed | closed indices |
hidden | hidden indices,但是必须和open或者close连用,或两个一起连用 |
none | 不允许使用通配符 |
另外一些支持多目标语法的指向indices还支持下面的可选参数:
ignore_throttled
(可选,布尔值)默认为true。如果为true,冻结的索引会被忽略。如果我们要包含已冻结的索引,可以设置为false。