是否可以在 NEST 上查询多个术语字段 (.NET) 的聚合



下面是 NEST 查询和聚合:

        Func<QueryContainerDescriptor<ConferenceWrapper>, QueryContainer> query =
            q =>
            q.Term(p => p.type, "conference")
            // && q.Term(p => p.conference.isWaitingAreaCall, true)
            && q.Range(d => d.Field("conference.lengthSeconds").GreaterThanOrEquals(minSeconds))
            && q.DateRange(qd => qd.Field("conference.firstCallerStart").GreaterThanOrEquals(from.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffZ")))
            && q.DateRange(qd => qd.Field("conference.firstCallerStart").LessThanOrEquals(to.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffZ")));
        Func<AggregationContainerDescriptor<ConferenceWrapper>, IAggregationContainer> waitingArea =
            a => a
            .Terms("both", t => t
            .Field(p => p.conference.orgNetworkId) // seems ignore this field
            .Field(p => p.conference.isWaitingAreaCall)
            // .Field(new Field(  p => p.conference.orgNetworkId + "-ggg-" + p.conference.networkId)
            .Size(300)
            .Aggregations(a2 => a2.Sum("sum-length", d2 => d2.Field("conference.lengthSeconds"))));

我调用了.Field(p => p.conference.orgNetworkId),然后是.Field(p => p.conference.isWaitingAreaCall) 但似乎 NEST 客户端试图忽略第一个字段表达式。

是否可以将多个字段作为术语分组依据?

Elasticsearch 不支持直接对多个字段进行术语聚合;在 NEST 中对.Field(...)的调用是赋值而不是加法的,因此最后一次调用将覆盖任何先前设置的值。

为了在多个字段上进行聚合,您可以

  1. 在索引时创建一个复合字段,其中包含要聚合

    的值

  2. 使用脚本通过组合两个字段值来生成查询时要聚合的术语。

第一个选项的性能将优于第二个选项。

最新更新