ruby-on-rails – 为已存储数据的模型重新加载轮胎/弹性搜索映射
我正在使用Tire和elasticsearch在MongoMapper模型上提供搜索功能,这是Rails应用程序的一部分.我只是偶然发现了一个问题,当我重新部署到使用以下配置的环境(在config / environments / env_name.rb中)时,此模型的映射没有更新:
config.cache_classes = true 单独重新加载类似乎没有解决问题(也许可以理解,新的映射可能与我猜的现有数据不兼容?).相反,我必须做以下事情: MyModel.index.delete <restart the app or reload the class> MyModel.index.import MyModel.all 我只是想知道是否有更好的方法a).确保我的模型代码中定义的最新映射在每次部署后由elasticsearch使用,但b).避免用完整的数据集重新填充索引? 我们通常使用Chef进行部署,因此我可以自动完成我成功使用的三个步骤而不会有太多麻烦.但我是弹性研究的新手,所以我认为我很可能会误用两者或者让事情变得不必要. 解决方法
几点在这里:
> Tire尝试在类加载时使用正确的映射创建索引 那么,您的问题更多的是关于正确的工作流程?部署新版本的应用程序时,不应重新填充索引,就像不从某种备份重新填充数据库一样. 当然可以自动检查符合模型中当前定义的索引映射(将MyModel.tire.index.mapping与MyModel.tire.mapping进行比较,如果不同则重新填充等),这是我要警惕的事情. 开发人员通常知道何时更改映射并应重新索引数据.删除索引并重新填充也意味着搜索停机时间,甚至对大型应用程序也不可行. 一个更好的解决方案是在导入数据时使用特定的索引名称,例如my-index-2012-12,并将my-index别名指向此索引.然后,您可以自由地重新填充索引,并在完成后翻转别名,而无需停机.轮胎在这种工作流程(Rake导入任务等)中努力为您提供支持. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |