使用 NEST V5.4 重建索引 - ElasticSearch
Reindexing using NEST V5.4 - ElasticSearch
我对 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 天搜索,我找到了重新索引索引的解决方案。为了解决以后的问题,我会提供我的解决方案。
嵌套版本 - 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 方法 returns 一个冷的 IObservable,你必须调用 .Subscribe() 来启动一切.
因此,您需要将其添加到您的代码中:
var o = new ReindexObserver(
onError: (e) => { //do something },
onCompleted: () => { //do something });
reindex.Subscribe(o);
有用的检查链接是:
我对 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 天搜索,我找到了重新索引索引的解决方案。为了解决以后的问题,我会提供我的解决方案。
嵌套版本 - 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 方法 returns 一个冷的 IObservable,你必须调用 .Subscribe() 来启动一切.
因此,您需要将其添加到您的代码中:
var o = new ReindexObserver(
onError: (e) => { //do something },
onCompleted: () => { //do something });
reindex.Subscribe(o);
有用的检查链接是: