我正在使用Elasticsearch 6.x,在我的索引器中,我想删除现有的索引,并在数据更新后重新创建一个新的索引。这就是我目前的情况:
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所问的那样重新创建索引:
我的数据不是加性的,即随着时间的推移,需要添加一些索引实体,需要更新一些实体,需要删除一些索引实体。另一方面,我拥有的数据量很小,因此这种方法听起来是可行的。
不过,我对弹性搜索还是新手,我很想知道是否有更好的方法。
发布于 2019-08-14 08:40:04
您可能需要考虑使用索引别名和
my_index_v1my_index_v1的my_index_v1别名my_index别名进行批量索引和搜索当希望删除和创建索引时,
my_index_v2my_index别名从my_index_v1中删除并添加到my_index_v2中my_index_v1在这样做时,任何应用程序和操作都可以使用索引别名。使用这种方法,您希望索引到my_index_v2中的数据可能实际上被索引到my_index_v1中,因为批量索引请求是在创建my_index_v2和替换索引别名之前处理的。如果这是一个问题,则在创建my_index_v1和交换别名时,可以使my_index_v2不可写,并处理应用程序中大容量索引失败的问题,可能会在未编入索引的文档排队并再次尝试;您可能会从批量索引中检查特定的故障响应,并检查索引元数据以查看索引是否可写。
https://stackoverflow.com/questions/57484500
复制相似问题