簡體   English   中英

NEST 不允許我添加 func 參數

[英]NEST won't allow me to add a func parameter

好的,我有一個奇怪的問題,我不確定是否只是因為它們是 funcs 並且 funcs 對我來說很新(func 的整個想法讓我有點惱火)。

我需要兩次調用完全相同的查詢,因為我需要 2 個圖形/數據集。 每個參數一個。 因為我不想重復我的查詢,所以我在我的類中添加了一個 func 參數,所以我可以強類型地選擇我的類上的正確屬性。

SearchDescriptor<Stats> Query(SearchDescriptor<Stats> qc, Func<Stats, double> field)
{
    var query = qc
        .Aggregations(aggs => aggs
            .DateHistogram("histogram", d => d
                .Field(f => f.Timestamp)
                .FixedInterval("30m")
                .MinimumDocumentCount(1)
                .Aggregations(childAggs => childAggs
                    .Average("3", f => f
                        .Field(fi => field(fi))
                    )
                )
            )
        )
        .Query(q =>
            q.Bool(b =>
                b.Filter(
                    f => f.MatchPhrase(mp => mp
                        .Field(fi => fi.Name)
                        .Query(name)
                    ),
                    f => f.DateRange(r => r
                        .Field(fi => fi.Timestamp)
                        .GreaterThanOrEquals(DateTime.UtcNow.AddDays(-1))
                        .LessThanOrEquals(DateTime.UtcNow)
                    )
                )
            )
        );

    return query;
}

var cpu = await GetByScrolling<Stats>(client, qc => Query(qc, fi => fi.CpuPercent));
var memory = await GetByScrolling<Stats>(client, qc => Query(qc, fi => fi.MemoryUsage));

這可以編譯並且應該可以工作,但不幸的是生成的 JSON 是這樣的:

"aggs": {
    "3": {
        "avg": {
            "field": "field"
        }
    }
}

如您所見,值為field ,這絕對是錯誤的。 這就像 NEST 的內部部分對存在的任何參數執行某種.ToString()操作,這就是為什么它返回field而不是我放在 func 中的內容。

知道這是否應該是這樣的? 所述aggs在我的JSON也對應於.Aggregations(aggs => aggs拉姆達命名。

啊,正如我所說,我是 funcs 和Expression新手,事實證明這正是我所需要的。 它實際上並不評估 func - 我需要給它一個表達式。

SearchDescriptor<Stats> Query(SearchDescriptor<Stats> qc, Expression<Func<Stats, double>> field)
{
    ......
}

然后給它表達式:

.Average("3", f => f
    .Field(field)
)

然后它會對其進行評估並完美運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM