我已经添加了新的Map(主要是现有字段的非分析版本),现在我必须弄清楚如何重新索引现有数据。我试着在ElasticSearch网站上遵循指南,但这太令人困惑了。我也尝试过使用插件(ElasticSearch-reindex,allegro/ElasticSearch-reindex-Tool)。我看过ElasticSearch - Reindexing your data with zero downtime,这是一个类似的问题。我希望不必依赖外部工具(如果可能)并尝试使用批量API(与原始插入一样)
我可以很容易地重建整个索引,因为它是一个真正的只读数据,但这不会真正在长期工作,如果我应该添加更多的字段等,当我与它生产。我想知道有没有人知道对于ES相对新手来说,有一个容易理解/遵循的解决方案或步骤。我使用的是版本2,使用的是Windows。
5条答案
按热度按时间bkhjykvo1#
重新索引是指读取数据,删除ElasticSearch中的数据,然后再次摄取数据。不存在“就地更改现有数据的Map”这样的事情。您提到的所有重建索引工具都只是对读取->删除->摄取的 Package 。
您可以随时调整新索引的Map,并在以后添加字段。所有新字段都将根据此Map进行索引。或者,如果您无法控制新字段,则使用动态Map。
看一看Change default mapping of string to "not analyzed" in Elasticsearch,看看如何使用动态Map来获取字符串的NOT_ANALYSED字段。
重建索引是非常昂贵的。更好的方法是创建一个新的索引并删除旧的索引。要在零停机时间内实现这一点,请对所有客户使用索引别名。想一想名为“data-version1”的索引。在步骤中:
_reindex
API来实现)总是使用别名是很好的做法。
eanckbw92#
在2.3.4版中,提供了一个新的API_reindex,它将完全按照它所说的做。基本用法是
rkttyhzu3#
从
Remote
主机到Local
主机的Elasticearch重新索引示例(2020年1月更新)tkclm6bt4#
如果你想像我一样直接回答这个常见而基本的问题,而这个问题并没有被Elact和整个社区所解决,那么这里的代码对我来说是有效的。
假设您只是在调试,而不是在生产环境中,并且添加或删除字段是完全合法的,因为您完全不关心停机或延迟:
wqsoz72f5#
我也面临着同样的问题。但我找不到任何资源来更新当前的索引Map和分析器。我的建议是使用scroll and scan api,并使用新Map和新字段将数据重新索引到新索引。