随着应用的不断升级,索引中的类型也会越来越多,新增加的类型中势必会使用到一些自定义的Analyzer。但是通过_settings
API不能直接在已经存在的索引上使用。
例如,在上节索引的基础上,添加一个新的analyzer
:
PUT /analyzer_test/_settings
{
"analysis": {
"analyzer": {
"my_custom_analyzer2": {
"type": "custom",
"char_filter": ["html_strip"],
"tokenizer": "standard",
"filter": [
"lowercase"
]
}
}
}
}
报错Can't update non dynamic settings
:
这里就引出来两个概念dynamic setting
和static settings
。
Elasticsearch 里很多设置都是动态的,可以通过 API 设置或更新正在运行的集群配置。
而静态设置必需要先关掉索引,然后再应用更改。在这个过程中索引是不可用的
很不幸,向已有索引添加分析器这个操作就属于Static setting
,要先关掉索引。
使用_open
和_close
这一对操作,首先将目标索引关闭,执行需要的更新操作,然后再打开该索引。
依次执行下面三个操作:
此时成功添加新的分析器。验证:
1.虽然_open
和_close
操作时间极短,但不太建议应用在对可用性要求很高的生产环境,此时可以考虑使用reindex来解决。
2.更新已有分析器
同样可以实现,操作时也需要关闭索引 -> 更新已有分析器 -> 开启索引