我有一个索引,我将重新编制索引。目前我想创建一个新索引,它应该包含可以在原始索引中找到的完全相同的映射。
我有这个:
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,它将获取目标索引名称并为我创建索引以及源的映射?
答案 0 :(得分:1)
您可以从一个索引获取映射并使用它们在
中创建另一个索引中的映射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
});
或者,是否有一个Reindex API,它将获取目标索引名称并为我创建索引以及源的映射?
NEST内有两个Reindex API;自NEST 1.x以来一直存在的Observable实现,以及自2.3以来的Reindex API as available within Elasticsearch(在NEST中称为ReindexOnServer
)。以前的Observable实现可以为您创建目标索引,尽管它将复制所有设置,映射和别名。后一个Reindex API不会在操作过程中创建目标索引,因此需要在开始重新索引过程之前设置它。