- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我问是因为我们的搜索在解决问题时处于不断变化的状态,但是每次我们对索引进行更改(更改分词器或过滤器,或分片/副本的数量)时,我们都必须消除整个索引并将我们所有的 Rails 模型重新索引回 Elasticsearch ...这意味着我们必须考虑停机时间来重新索引我们所有的记录。
有没有我不知道的更聪明的方法?
最佳答案
我认为@karmi 是对的。但是,让我解释得更简单一些。我需要偶尔使用一些新属性或分析设置来升级生产模式。我最近开始使用下面描述的场景来进行实时、恒定负载、零停机索引迁移。您可以远程执行此操作。
步骤如下:
real1
和别名 real_write
,real_read
指向它,real_write
,只从real_read
读取,_source
文档属性可用。使用您选择的新映射和设置创建 real2
索引。
使用以下批量查询开关写入别名。
curl -XPOST 'http://esserver:9200/_aliases' -d '
{
"actions" : [
{ "remove" : { "index" : "real1", "alias" : "real_write" } },
{ "add" : { "index" : "real2", "alias" : "real_write" } }
]
}'
这是原子操作。从此时起,real2
在所有节点上填充了新客户端的数据。读者仍然通过 real_read
使用旧的 real1
。这就是最终一致性。
数据必须从 real1
迁移到 real2
,但是 real2
中的新文档不能被旧条目覆盖。迁移脚本应该使用 bulk
API 和 create
操作(不是 index
或 update
)。我使用简单的 Ruby 脚本 es-reindex它有很好的 E.T.A.状态:
$ ruby es-reindex.rb http://esserver:9200/real1 http://esserver:9200/real2
更新 2017 您可以考虑新的 Reindex API而不是使用脚本。它有很多有趣的功能,如冲突报告等。
现在 real2
是最新的并且客户正在写入它,但是他们仍然从 real1
读取。让我们更新阅读器别名:
curl -XPOST 'http://esserver:9200/_aliases' -d '
{
"actions" : [
{ "remove" : { "index" : "real1", "alias" : "real_read" } },
{ "add" : { "index" : "real2", "alias" : "real_read" } }
]
}'
写入和读取到 real2
。您可以从 ES 集群备份和删除 real1
索引。
完成!
关于elasticsearch - 有没有更聪明的方法来重新索引 elasticsearch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13851044/
我正在尝试切换(某种)命令。 if 'Who' in line.split()[:3]: Who(line) elif 'Where' in line.split()[:3]: W
基本上我是在一个物理游戏中计算阻力。侧向运动需要减少(如接近 0,而不仅仅是负数),但我不知道它在哪个方向行进,所以我不知道是增加阻力还是减去阻力。 (如果一个项目向右移动,它有正向力,向左移动,负向
我有以下表格 CREATE TABLE Foos ( [Id] INT IDENTITY, -- Other fields ) CREATE TABLE Boos ( [Id]
我正在运行一个非常简单的程序 static void Main(string[] args) { Console.WriteLine(Get4S());
PHP $total_points = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM account WHERE id='$id'"),0
我是一名优秀的程序员,十分优秀!