"Clone" 索引映射
"Clone" index mappings
我有一个索引,我将对其重新编制索引。目前我想创建一个新索引,它应该包含可以在原始索引中找到的完全相同的映射。
我知道了:
var srcMappings = client.GetMapping(new GetMappingRequest((Indices)sourceIndexName)).Mappings;
然后我尝试创建一个索引:
var response = client.CreateIndex(destinationIndex, c => c
.Settings(...my settings ...)
.Mappings(... what here? ...)
);
我究竟应该向上面的 .Mappings(...)
传递什么,以便将源索引中的映射复制到目标索引中?我不想明确地 'know' 关于类型。
我正在尝试使用 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 以来一直存在的 Observable 实现,以及自 2.3 以来的 Reindex API as available within Elasticsearch(在 NEST 中称为 ReindexOnServer
)。以前的 Observable 实现可以为您创建目标索引,尽管它会复制所有设置、映射和别名。后面的 Reindex API 不会将创建目标索引作为操作的一部分,因此需要在开始 reindex 过程之前进行设置。
我有一个索引,我将对其重新编制索引。目前我想创建一个新索引,它应该包含可以在原始索引中找到的完全相同的映射。
我知道了:
var srcMappings = client.GetMapping(new GetMappingRequest((Indices)sourceIndexName)).Mappings;
然后我尝试创建一个索引:
var response = client.CreateIndex(destinationIndex, c => c
.Settings(...my settings ...)
.Mappings(... what here? ...)
);
我究竟应该向上面的 .Mappings(...)
传递什么,以便将源索引中的映射复制到目标索引中?我不想明确地 'know' 关于类型。
我正在尝试使用 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 以来一直存在的 Observable 实现,以及自 2.3 以来的 Reindex API as available within Elasticsearch(在 NEST 中称为 ReindexOnServer
)。以前的 Observable 实现可以为您创建目标索引,尽管它会复制所有设置、映射和别名。后面的 Reindex API 不会将创建目标索引作为操作的一部分,因此需要在开始 reindex 过程之前进行设置。