met*_*ase 11 elasticsearch reindex
我添加了新的映射(主要是现有字段的not_analyzed版本)我现在必须弄清楚如何重新索引现有数据.我试过按照弹性搜索网站上的指南,但这太混乱了.我也尝试过使用插件(elasticsearch-reindex,allegro/elasticsearch-reindex-tool).我查看了ElasticSearch - 以零停机时间重新索引数据,这是一个类似的问题.我希望不必依赖外部工具(如果可能)并尝试使用批量API(与原始插入一样)
我可以很容易地重建整个索引,因为它确实是一个只读数据,但是如果我想要在生产中使用它时我想要添加更多字段等,那么从长远来看它不会真正起作用.我想知道是否有人知道一个易于理解/遵循的解决方案或相对新手ES的步骤.我在版本2并使用Windows.
小智 9
重新索引是指读取数据,在elasticsearch中删除数据,然后再次摄取数据。没有诸如“在适当位置更改现有数据的映射”之类的东西。您提到的所有重新索引工具都只是对read-> delete-> estest的包装。
您始终可以调整新索引的映射,以后再添加字段。将针对此映射为所有新字段建立索引。如果您无法控制新字段,请使用动态映射。
看一下Elasticsearch中将字符串的默认映射更改为“未分析”,以了解如何使用动态映射获取字符串的not_analyzed字段。
重新索引非常昂贵。更好的方法是创建一个新索引并删除旧索引。为了实现零停机时间,请为所有客户使用索引别名。考虑一个名为“ data-version1”的索引。步骤:
始终使用别名是一个好习惯。
在 2.3.4 版本中,可以使用新的 api _reindex 来执行它所说的操作。基本用法是
{
"source": {
"index": "currentIndex"
},
"dest": {
"index": "newIndex"
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
如果您像我一样想要对这个常见且基本的问题有一个直接的答案,而弹性和整个社区通常很难解决这个问题,那么这里是适合我的代码。
假设您只是在调试,而不是在生产环境中,并且添加或删除字段绝对合法,因为您绝对不关心停机时间或延迟:
# First of all: enable blocks write to enable clonage
PUT /my_index/_settings
{
"settings": {
"index.blocks.write": true
}
}
# clone index into a temporary index
POST /my_index/_clone/my_index-000001
# Copy back all documents in the original index to force their reindexetion
POST /_reindex
{
"source": {
"index": "my_index-000001"
},
"dest": {
"index": "my_index"
}
}
# Disable blocks write
PUT /my_index/_settings
{
"settings": {
"index.blocks.write": false
}
}
# Finaly delete the temporary index
DELETE my_index-000001
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14549 次 |
| 最近记录: |