我想通过索引获取所有文档。我已经尝试过以下方法:
var response = client.Search(s => s.Index("test").MatchAll());
响应返回“成功操作”,但它没有命中任何文档,尽管该索引下有很多文档。
To get all索引中的文档,您需要使用滚动API https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html。请注意,根据我们讨论的文档数量,您可能会通过多个 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)