NEST搜索整个文档C#Elasticsearch

时间:2018-02-13 10:44:45

标签: c# elasticsearch nest

我想使用Nest在Elasticsearch中查询超过一百万个文档。我的代码:

var response = client.Search<MyObject>(s => s
          .Index("test")
          .Type("one")
          .Query(q => q.
                Term(
                    t => t.name, "A"
                )
          )
          .Size(10000)
          .Scroll("10m")
          .Pretty()
        );

我的MyObject类:

public class MyObject
    {
        public int id { get; set; }
        public int age { get; set; }
        public string lastname { get; set; }
        public string name { get; set; }
    }

问题是当在前10k文档中找不到此查询时,它不会继续搜索结果滚动API的其余部分。

我的问题是如何实现这一点(即尽管没有命中,但仍在Scroll API的整个页面中移动......)?

1 个答案:

答案 0 :(得分:3)

查询将搜索所有文档,但只会返回最多.Size个文档。

您可以使用.From().Size()对结果进行分页,但是,当分页超过一百万个文档时,深度分页可能是一个问题。为此,您最好使用scroll API来有效检索100万个文档。 NEST有一个可观察的助手ScrollAll()来帮助解决这个问题

var client = new ElasticClient();

// number of slices in slice scroll
var numberOfSlices = 4;

var scrollObserver = client.ScrollAll<MyObject>("1m", numberOfSlices, s => s
    .MaxDegreeOfParallelism(numberOfSlices)
    .Search(search => search
        .Index("test")
        .Type("one")
        .Term(t => t.name, "A")
    )
).Wait(TimeSpan.FromMinutes(60), r =>
{
    // do something with documents from a given response.
    var documents = r.SearchResponse.Documents;
});