gpt4 book ai didi

elasticsearch - “Clone”索引映射

转载 作者:行者123 更新时间:2023-12-03 01:39:13 24 4
gpt4 key购买 nike

我有一个要重新编制索引的索引。目前,我想创建一个新索引,其中应包含与原始索引中可以找到的完全相同的映射。

我有这个:

var srcMappings = client.GetMapping(new GetMappingRequest((Indices)sourceIndexName)).Mappings;

我尝试创建一个索引:
var response = client.CreateIndex(destinationIndex, c => c
.Settings(...my settings ...)
.Mappings(... what here? ...)
);

我到底应该将什么传递给上面的 .Mappings(...),以便将源索引中的映射复制到目标索引中?我不想明确地“了解”类型。

我正在尝试使用Nest。

或者,是否有一个Reindex API,它将采用目标索引名称并为我创建索引以及源映射?

最佳答案

您可以从一个索引获取映射,并使用它们在另一个索引中创建映射。

var client = new ElasticClient();

var getIndexResponse = client.GetIndex("assignments");

var createIndexResponse = client.CreateIndex("assignments2", c => c
.Mappings(m => Promise.Create(getIndexResponse.Indices["assignments"].Mappings))
);

您将需要一个 IPromise<T>实现
public class Promise
{
public static IPromise<TValue> Create<TValue>(TValue value) where TValue : class =>
new Promise<TValue>(value);
}

public class Promise<T> : IPromise<T> where T : class
{
public T Value { get; }
public Promise(T value) => Value = value;
}

NEST的流畅API实现中的某些地方需要Promise,在这些地方,值是可加的,并且需要在以后返回最终值。

您也可以使用对象初始值设定项语法执行相同操作,而无需使用 Promise<T>
var createIndexResponse = client.CreateIndex(new CreateIndexRequest("assignments2")
{
Mappings = getIndexResponse.Indices["assignments"].Mappings
});

Alternatively, is there a Reindex API which would take the destination index name and create the index for me, together with the mappings of the source?



NEST中有两个Reindex API;一个从NEST 1.x开始存在的可观察的实现,从2.3开始存在 Reindex API as available within Elasticsearch(在NEST中称为 ReindexOnServer)。前一个Observable实现可以为您创建目标索引,尽管它将复制所有设置,映射和别名。后者的Reindex API不会在操作中创建目标索引,因此需要在开始重新索引过程之前进行设置。

关于elasticsearch - “Clone”索引映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49414690/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com