【发布时间】:2019-08-20 22:13:24
【问题描述】:
我正在使用 Elasticsearch NEST 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 所问的那样:
我的数据不是附加的,即随着时间的推移,一些索引实体需要添加,一些需要更新,一些需要删除。另一方面,我拥有的数据量足够小,这种方法听起来是可行的。
但是,我是弹性搜索的新手,很想知道是否有更好的方法。
【问题讨论】:
-
您在创作过程中期待什么样的问题?您想通知调用站点发生的问题还是继续尝试直到成功?
-
@Prolog 我有一个每 20 分钟运行一次的后台任务,并尝试重新创建索引。不过,我不太明白您的问题的答案如何在这里产生影响。 CreateIndex 可能由于多种原因而失败。但是,即使在成功的最佳情况下,在重新创建索引的同时,对该索引的所有搜索都将失败,因为它不存在。
-
为什么要删除并重新创建索引而不是更新它?
-
@leandrojmp 我的数据不是附加的,即随着时间的推移,一些索引实体可能会被删除(或更新/添加)。另一方面,我拥有的数据量足够小,这种方法听起来是可行的。但是,我是弹性搜索的新手,很想知道是否有更好的方法。
-
你能分享一个你的数据样本以及你是如何查询它的吗?在创建索引时,您无法阻止搜索失败,也许在索引名称中使用时间戳,并且仅在创建新索引后删除索引。
标签: c# elasticsearch nest