首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用.NET客户端弹性搜索安全地重新创建索引

如何使用.NET客户端弹性搜索安全地重新创建索引
EN

Stack Overflow用户
提问于 2019-08-13 19:54:31
回答 1查看 150关注 0票数 2

我正在使用Elasticsearch 6.x,在我的索引器中,我想删除现有的索引,并在数据更新后重新创建一个新的索引。这就是我目前的情况:

代码语言:javascript
复制
this.elasticClient.DeleteIndex(indexName, x => x.RequestConfiguration(y => y.AllowedStatusCodes(404)));
this.elasticClient.CreateIndex(indexName, x => x.Settings(s => s.NumberOfShards(1)).Mappings(ms => ms.Map<T>(m => m.AutoMap())));
this.elasticClient.Bulk(b => b.Index(indexName).IndexMany(entities));

这种方法的问题是,如果delete成功,但create失败,则在重新创建索引之前,该索引是不可用的。此外,即使在它成功的最佳情况下,在重新创建索引的同时,对该索引的所有搜索都将失败,因为它不存在。有更好的办法吗?

编辑:

我想值得一提的是,为什么我会像@leandrojmp所问的那样重新创建索引:

我的数据不是加性的,即随着时间的推移,需要添加一些索引实体,需要更新一些实体,需要删除一些索引实体。另一方面,我拥有的数据量很小,因此这种方法听起来是可行的。

不过,我对弹性搜索还是新手,我很想知道是否有更好的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-14 08:40:04

您可能需要考虑使用索引别名和

  1. 创建版本索引,例如my_index_v1
  2. 创建指向单个索引的别名,例如指向my_index_v1my_index_v1别名
  3. 使用my_index别名进行批量索引和搜索

当希望删除和创建索引时,

  1. 创建一个新的索引my_index_v2
  2. 向别名API发送请求,将my_index别名从my_index_v1中删除并添加到my_index_v2
  3. 删除my_index_v1

在这样做时,任何应用程序和操作都可以使用索引别名。使用这种方法,您希望索引到my_index_v2中的数据可能实际上被索引到my_index_v1中,因为批量索引请求是在创建my_index_v2和替换索引别名之前处理的。如果这是一个问题,则在创建my_index_v1和交换别名时,可以使my_index_v2不可写,并处理应用程序中大容量索引失败的问题,可能会在未编入索引的文档排队并再次尝试;您可能会从批量索引中检查特定的故障响应,并检查索引元数据以查看索引是否可写。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57484500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档