elasticsearch - elasticsearch 更新索引设置分析器
问题描述
我有一个包含多个主题的图书索引
每个主题都有自己的同义词集和全局同义词
PUT /books/_settings
{
"analysis": {
"filter": {
"biology_synonyms": {
"type": "synonym",
"synonyms": [
"a, aa, aaa"
]
},
"chemistry_synonyms": {
"type": "synonym",
"synonyms": [
"c, cc, ccc"
]
},
"global_synonyms": {
"type": "synonym",
"synonym": [
"x, xx, xxx"
]
}
},
"analyzer": {
"chemistry_analyzer": {
"filter": [
"global_synonyms", "chemistry_synonyms"
]
},
"biology_analyzer": {
"filter": [
"global_synonyms", "biology_synonyms"
]
}
}
}
}
假设在任何时候,我想添加名为“Astronomy”的新主题
现在的问题是如何更新索引设置以添加新的“Astronomy_synonyms”和“Astronomy_analyzer”
我的应用程序要求我使用现有过滤器和分析器附加设置,我不想覆盖(替换设置)
解决方案
您绝对可以附加新的令牌过滤器和分析器,但是您需要在更新设置之前关闭索引并在完成后重新打开它。在下文中,我假设索引已经存在。
假设您使用以下初始设置创建索引:
PUT /books
{
"settings": {
"analysis": {
"filter": {
"biology_synonyms": {
"type": "synonym",
"synonyms": [
"a, aa, aaa"
]
},
"chemistry_synonyms": {
"type": "synonym",
"synonyms": [
"c, cc, ccc"
]
},
"global_synonyms": {
"type": "synonym",
"synonyms": [
"x, xx, xxx"
]
}
},
"analyzer": {
"chemistry_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"global_synonyms",
"chemistry_synonyms"
]
},
"biology_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"global_synonyms",
"biology_synonyms"
]
}
}
}
}
}
然后你需要关闭你的索引:
POST books/_close
然后您可以附加新的分析器和令牌过滤器:
PUT /books/_settings
{
"analysis": {
"filter": {
"astronomy_synonyms": {
"type": "synonym",
"synonyms": [
"x, xx, xxx"
]
}
},
"analyzer": {
"astronomy_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"global_synonyms",
"astronomy_synonyms"
]
}
}
}
}
最后重新打开你的索引
POST books/_open
如果您随后检查索引设置,您会看到所有内容都已正确合并。
推荐阅读
- java - Cassandra 启动问题:CassandraDaemon
- java - 在链接的阻塞队列中未正确传递值
- python - 测试保存的卷积自动编码器
- swift - 如何打印 CharacterSet.decimalDigits 的内容?
- ruby-on-rails - 给定月份和日期的最新日期
- php - Laravel - 通过自定义 php 脚本检查存储文件夹权限
- java - 无法从同一个包中解析类(java)
- c++ - 做对了类似竞争的问题,但在提高效率方面需要帮助
- r - 如何将响应变量传递给我自己函数中的表达式内的 lm
- powershell - IF 在函数中不起作用(PowerShell)