我是ElasticSearch的新手。我正在尝试为索引重新索引以便对其重命名。我正在使用NEST API v5.4。我看到了这个例子:
var reindex = elasticClient.Reindex<Customer>(r => r.FromIndex("customers-v1") .ToIndex("customers-v2") .Query(q => q.MatchAll()) .Scroll("10s") .CreateIndex(i => i.AddMapping<Customer>(m => m.Properties(p => p.String(n => n.Name(name => name.Zipcode).Index(FieldIndexOption.not_analyzed))))));
资料来源 :http : //thomasardal.com/elasticsearch-migrations-with-c-and- nest/
但是,我无法使用NEST 5.4重现此内容。我认为这是2.4版。我检查ElasticSearch的重大更改,然后尝试使用此方法重新编制索引:
来源 :https : //www.elastic.co/guide/en/elasticsearch/client/net-api/current/nest-breaking- changes.html
public method Nest.ReindexDescriptor..ctor Declaration changed (Breaking) 2.x: public .ctor(IndexName from, IndexName to) 5.x: public .ctor() var reindex = new client.Reindex(oldIndexName, newIndexName);
但这也没有用。我也搜索文档,但没有在c#上找到任何代码,只是JSON 源 :https : //www.elastic.co/guide/en/elasticsearch/reference/current/docs- reindex.html)
有人可以给我一个例子,如何在C#上使用NEST 5.4重新编制索引吗?
提前致谢!:slight_smile:
搜索2天后,我找到了重新索引索引的解决方案。为了解决将来的问题,我将提供解决方案。
Nest版本-5.4
var reindex = client.Reindex<object>(r => r .BackPressureFactor(10) // ScrollAll - Scroll all the documents of the index and store it for 1minute .ScrollAll("1m", 2, s => s .Search(ss => ss .Index(oldIndexName) .AllTypes()) // there needs to be some degree of parallelism for this to work .MaxDegreeOfParallelism(4)) .CreateIndex(c => c // New index here .Index(newIndexName) .Settings( // settings goes here) .Mappings( // mappings goes here)) .BulkAll(b => b // New index here! .Index(newIndexName) .Size(100) .MaxDegreeOfParallelism(2) .RefreshOnCompleted()));
ReIndex方法返回一个冷的 IObservable ,您必须在其上调用 .Subscribe() 以启动所有操作。
因此,您需要将其添加到您的代码中:
var o = new ReindexObserver( onError: (e) => { //do something }, onCompleted: () => { //do something }); reindex.Subscribe(o);
进行检查的有用链接是:
文献资料
GitHub上的第2660期
GitHub上的问题2771