向已有索引添加分析器

随着应用的不断升级,索引中的类型也会越来越多,新增加的类型中势必会使用到一些自定义的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:

image-20220724223555018

这里就引出来两个概念dynamic settingstatic settings

Dynamic setting和Static setting

Elasticsearch 里很多设置都是动态的,可以通过 API 设置或更新正在运行的集群配置。

而静态设置必需要先关掉索引,然后再应用更改。在这个过程中索引是不可用的

很不幸,向已有索引添加分析器这个操作就属于Static setting,要先关掉索引。


向已有索引添加分析器

使用_open_close这一对操作,首先将目标索引关闭,执行需要的更新操作,然后再打开该索引。

依次执行下面三个操作:

image-20220724224527442

此时成功添加新的分析器。验证:

image-20220724224619853

1.虽然_open_close操作时间极短,但不太建议应用在对可用性要求很高的生产环境,此时可以考虑使用reindex来解决。
2.更新已有分析器同样可以实现,操作时也需要关闭索引 -> 更新已有分析器 -> 开启索引