巢 - 重新索引

时间:2016-04-08 19:56:57

标签: elasticsearch nest reindex elasticsearch-net

Elasticsearch在Elasticsearch 2.3.0中发布了他们新的Reindex API,当前版本的NEST(2.1.1)是否使用了这个API?如果没有,是否有计划这样做? 我知道当前版本有一个reindex方法,但它会强制您创建新索引。对于我的用例,索引已经存在。

任何反馈/见解都会得到很好的评价。日Thnx!

1 个答案:

答案 0 :(得分:1)

这个问题最好在github issues for NEST上询问,因为项目的提交者能够最好地回答:)

Elasticsearch 2.3.0中提供了

A commit went in on 6 April to map the new Reindex API以及Task Management APIUpdate By Query等其他功能。这进入了NEST 2.3.0

NEST 2.x已经包含了一个帮助程序,用于进行重建索引,使用封面下的扫描/滚动并返回可用于观察进度的IObservable<IReindexResponse<T>>

public class Document {}

var observable = client.Reindex<Document>("from-index", "to-index", r => r
    // settings to use when creating to-index
    .CreateIndex(c => c
        .Settings(s => s
            .NumberOfShards(5)
            .NumberOfReplicas(2)
        )
    )
    // query to optionally limit documents re-indexed from from-index to to-index
    .Query(q => q.MatchAll())
    // the number of documents to reindex in each request.
    // NOTE: The number of documents in each request will actually be
    //     NUMBER * NUMBER OF SHARDS IN from-index
    // since reindex uses scan/scroll
    .Size(100)
);

var observer = new ReindexObserver<Document>(
    onNext: reindexResponse =>
    {
        // do something with notification. Maybe log total progress
    },
    onError: exception =>
    {
        throw exception;
    },
    completed: () =>
    {
        // Maybe log completion, refresh the index, etc..
    }
);

observable.Subscribe(observer);  

查看ReIndex API tests的一些想法。

新的Reindex API在客户端中命名为client.ReIndexOnServer(),以区别于现有的可观察实现。