elasticsearch - Elasticsearch 重新索引然后无法添加映射
问题描述
您好 Elasticsearch 专家!想知道是否有人可以帮助解决正在发生的一件奇怪的事情:我们有一个索引,其中映射的数量已经变得庞大(超过 3000 个),我们希望通过重新索引来减少这种情况。在新索引中,我们将关闭动态映射,只添加我们想要用于搜索的映射。所以,我创建了一个新索引:
PUT /newindex-2021.01/_mapping
{
"dynamic": "false",
"date_detection": true,
"properties": {
"timestamp": {
"type": "date"
}
}
}
然后我重新索引:
POST _reindex?wait_for_completion=false
{
"source": {
"index": "oldindex-2021.01"
},
"dest": {
"index": "newindex-2021.01"
}
}
然后我想为事件字段添加一个映射来测试一切是否正常,所以我运行了:
PUT /*newindex*/_mapping
{
"properties": {
"event": {
"type": "text"
}
}
}
为了安全起见,我也跑了(不确定这是否有任何影响):
PUT /newindex-2021.0/_mapping
{
"properties": {
"event": {
"type": "text"
}
}
}
当我导航到发现页面时,它现在显示事件字段的放大镜(表明我可以只搜索事件,因为已创建映射)。但是,当我单击它时,没有结果显示(好像没有文档具有字段事件 == 值,尽管它确实存在) 有什么我遗漏的吗?我只是想将映射添加到空索引.. 感谢您的帮助!
解决方案
您无法更改已编入索引的文档的映射(事实上,这正是您正确地重新索引原始索引的原因)。您在重新索引后所做的是将新映射添加到没有任何字段的字段,使其从现在开始可查询 - 即,仅适用于新文档,而不是追溯现有文档。
您需要使用已包含您正在查找的字段映射的映射重新索引索引。
推荐阅读
- sql - 如何纠正“缺少右括号”的问题?
- python - 如何仅检查列表中是否存在两个值
- android - Android gradle:如何在 build.gradle 脚本中获取合并的资源目录?
- json - 多态类型的 Json 对象建模
- c# - C# 参数 " 而不是反斜杠
- python - 在 scikit-learn 向随机森林模型添加交互效果
- tensorflow - 如何使用 TF2 在最新的 Tensorflow Object Detection API V2 中保存最佳模型?
- docker - K8s SQL2019 HA Containers - 伙计,我的 Pod 在哪里?
- java - 如果输入在 JAVA 中没有以数字结尾,为什么会导致我的输出出现额外的空行
- c++ - figlet 如何适合和弄脏?