加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 为已存储数据的模型重新加载轮胎/弹性搜索映射

发布时间:2020-12-17 03:15:24 所属栏目:百科 来源:网络整理
导读:我正在使用Tire和elasticsearch在MongoMapper模型上提供搜索功能,这是Rails应用程序的一部分.我只是偶然发现了一个问题,当我重新部署到使用以下配置的环境(在config / environments / env_name.rb中)时,此模型的映射没有更新: config.cache_classes = true
我正在使用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尝试在类加载时使用正确的映射创建索引
>但是当Tire已经存在时,它不会尝试为模型创建索引

那么,您的问题更多的是关于正确的工作流程?部署新版本的应用程序时,不应重新填充索引,就像不从某种备份重新填充数据库一样.

当然可以自动检查符合模型中当前定义的索引映射(将MyModel.tire.index.mapping与MyModel.tire.mapping进行比较,如果不同则重新填充等),这是我要警惕的事情.

开发人员通常知道何时更改映射并应重新索引数据.删除索引并重新填充也意味着搜索停机时间,甚至对大型应用程序也不可行.

一个更好的解决方案是在导入数据时使用特定的索引名称,例如my-index-2012-12,并将my-index别名指向此索引.然后,您可以自由地重新填充索引,并在完成后翻转别名,而无需停机.轮胎在这种工作流程(Rake导入任务等)中努力为您提供支持.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读