【问题标题】:How to construct Aggregation (Count) of records using NEST?如何使用 NEST 构造记录的聚合(计数)?
【发布时间】:2020-04-25 19:39:59
【问题描述】:

我需要使用 NEST 包装器执行记录的聚合(计数),但要在 NEST 中触发 DSL 查询。

由于我不知道如何正确构造它,所以我使用 LINQ 方法做了同样的事情。

ISearchResponse<AgencyDetailReportModel> searchResponse = ConnectionToESClient().Search<AgencyDetailReportModel>
                (s => s
                    .Index("accountsdata")


                    .From(0)
                    .Size(15000)
                    .Query(q =>
                            q.MatchAll()

                            )
                    );

var allocatedAgencies = agencySearchResponse.Documents.Where(w => !string.IsNullOrEmpty(w.agencyid)).Count(); 

var unAllocatedAgencies = agencySearchResponse.Documents.Where(w => string.IsNullOrEmpty(w.agencyid)).Count();

如何在 NEST 中构造 DSL 查询?

【问题讨论】:

    标签: elasticsearch nest dsl


    【解决方案1】:

    因此,对于您的问题,您需要 allocatedAgencies 计数和 unAllocatedAgencies 计数正确。我们可以通过简单的查询而不是进行聚合来实现这一点。

    var searchResponse = await highLevelClient.CountAsync<accountsdata>(s => s
                                       .Index("accountsdata")
                                       .Query(q => q
                                          .ConstantScore(c => c
                                            .Filter(f => f
                                                .Bool(b => b
                                                    .MustNot(m => m
                                                          .Exists(e => e.Field("agencyid"))))))));
    

    这是 unAllocatedAgencies 计数和 allocatedAgencies 以下是查询。

    var searchResponse = await highLevelClient.CountAsync<accountsdata>(s => s
                                       .Index("accountsdata")
                                       .Query(q => q
                                          .ConstantScore(c => c
                                            .Filter(f => f
                                                .Bool(b => b
                                                    .Must(m => m
                                                          .Exists(e => e.Field("agencyid"))))))));
    

    如果您遇到任何问题,请告诉我,它最多可以解决您上述问题。谢谢

    【讨论】:

    • 是否可以在同一个查询中执行操作?因为我有另一种情况,我需要对 6 个案例进行计数 - 所以在这种情况下我必须编写 6 次查询吗?
    • Kartheek,正如我之前所说,我还有一个要求。你可以看看stackoverflow.com/questions/61344612/…
    • Kartheek,我还有另一个使用过滤器聚合的要求(stackoverflow.com/questions/65034391/…)。你能帮我吗?
    猜你喜欢
    • 2017-09-05
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多