博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Elasticsearch] 向已存在的索引中加入自己定义filter/analyzer
阅读量:7037 次
发布时间:2019-06-28

本文共 1149 字,大约阅读时间需要 3 分钟。

问题描写叙述

随着应用的不断升级,索引中的类型也会越来越多,新添加的类型中势必会使用到一些自己定义的Analyzer。可是通过_settings端点的更新API不能直接在已经存在的索引上使用。

在sense中进行更新时会抛出异常:

PUT /symbol{  "settings": {    "analysis": {      "filter": {        "edgengram": {           "type": "edgeNGram",           "min_gram": "1",           "max_gram": "255" }      },      "analyzer": {        "symbol_analyzer": {          "type": "custom",          "char_filter": [],          "tokenizer": "standard",          "filter": [ "lowercase", "word_delimiter" ] },        "back_edge_ngram_analyzer": {          "type": "custom",          "char_filter": [],          "tokenizer": "whitespace",          "filter": [ "reverse", "edgengram", "reverse" ] }      }    }  }}

上例中,我们希望向名为symbol的索引中加入一个filter和两个analyzers。可是会抛出例如以下的错误信息:

{   "error": "IndexAlreadyExistsException[[symbol] already exists]",   "status": 400}

提示我们该索引已经存在了,无法加入。


解决方式

最直观的解决方式是首先备份该索引中已经存在的数据。然后删除它再重建该索引。

这样的方式比較暴力,当索引中已经存在相当多的数据时。不建议这样做。

第二种方案是使用_open和_close这一对端点,首先将目标索引关闭,运行须要的更新操作,然后再打开该索引。

POST /symbol/_closePUT /symbol/_settings{  "settings": {    ....      }}POST /symbol/_open

这样就避免了须要重建索引的麻烦。

有了新加入的filter和analyzer。就能够依据须要再对types中的mappings进行更新了。

转载地址:http://lfnal.baihongyu.com/

你可能感兴趣的文章
Bochs下编译安装Linux-0.11版本
查看>>
让tomcat 日志网页中显示
查看>>
Linux Ubuntu 16.04 主机名设置
查看>>
解码,
查看>>
CCNP 静态路由
查看>>
单链表二[不带头节点链表]
查看>>
xml解析——增删改查操作后将其修改结果保存
查看>>
49.C#--多态之抽象类
查看>>
Html中居中问题小结
查看>>
Spring mvc 拦截器
查看>>
MySQL GROUP BY 和GROUP_CONCAT的一些用法
查看>>
关于box2d的例子testbed
查看>>
## mysqldump 导出数据库各参数详细说明
查看>>
2.5.3 svn文件
查看>>
python
查看>>
43.防盗链配置、访问控制Directory、访问控制FilesMatch
查看>>
静态代理、动态代理,以及动态代理的调用说明
查看>>
centos7中配置rsync+inotify实现自动监控数据同步
查看>>
袋鼠云数据中台专栏2.0 | 数据中台之数据源
查看>>
部署Docker
查看>>