0

我想通过索引获取我的所有文档。我尝试了以下方法:

var response = client.Search(s => s.Index("test").MatchAll());

响应返回“成功操作”,但尽管该索引下有许多文档,但它没有命中任何文档。

4

1 回答 1

3

要获取索引中的所有文档,您需要使用Scroll API。请注意,根据我们讨论的文档数量,您可能会通过多个 HTTP 请求/响应批量接收它们。

NEST 中有一个助手可以使这更容易,ScrollAll()

Time processTimePerScroll = "20s";
int numberOfSlices = Environment.ProcessorCount;

var scrollAllObservable = client.ScrollAll<Person>(processTimePerScroll, numberOfSlices, sc => sc
    .MaxDegreeOfParallelism(numberOfSlices)
    .Search(s => s
        .Query(q => q
            .MatchAll()
        )
    )
)

var waitHandle = new ManualResetEvent(false);
Exception exception = null;

var scrollAllObserver = new ScrollAllObserver<Person>(
    onNext: response => 
    {
        // do something with the documents
        var documents = response.SearchResponse.Documents;
    },
    onError: e =>
    {
        exception = e;
        waitHandle.Set();
    },
    onCompleted: () => waitHandle.Set()
);


scrollAllObservable.Subscribe(scrollAllObserver);

waitHandle.WaitOne();

if (exception != null) 
{
    throw exception;    
}
于 2019-03-12T11:41:42.840 回答