嵌套聚合结果为空,但调试器中有数据

问题描述

我正在 nesT 中进行聚合,到目前为止一切正常,但是现在当我尝试通过 .children 访问嵌套字段时,结果为空,但是调试器正确显示了数据。>

DebuggerInfo

如果我通过邮递员发布此查询,我会得到以下结果:

{
    "took": 50,"timed_out": false,"_shards": {
        "total": 1,"successful": 1,"skipped": 0,"Failed": 0
    },"hits": {
        "total": {
            "value": 9,"relation": "eq"
        },"max_score": null,"hits": []
    },"aggregations": {
        "filter#Collarsize": {
            "Meta": {},"doc_count": 9,"nested#VariantsProperties": {
                "doc_count": 53,"sterms#Collarsize": {
                    "doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [
                        {
                            "key": "Collarsize","doc_count": 39,"sterms#banana": {
                                "doc_count_error_upper_bound": 0,"buckets": [
                                    {
                                        "key": "15","doc_count": 7
                                    },{
                                        "key": "16",{
                                        "key": "17","doc_count": 6
                                    },{
                                        "key": "18",{
                                        "key": "LAR","doc_count": 2
                                    },{
                                        "key": "MED",{
                                        "key": "SML",{
                                        "key": "X.L",{
                                        "key": "XXL",{
                                        "key": "15.5","doc_count": 1
                                    },{
                                        "key": "16.5",{
                                        "key": "XXXL","doc_count": 1
                                    }
                                ]
                            }
                        },{
                            "key": "Colour","doc_count": 14,"buckets": [
                                    {
                                        "key": "Blue",{
                                        "key": "White","doc_count": 7
                                    }
                                ]
                            }
                        }
                    ]
                }
            },"sterms#Collarsize": {
                "doc_count_error_upper_bound": 0,"buckets": []
            }
        }
    }
}

有没有办法进入孩子的“Collarsize”?我尝试了与 .nested,.children,.terms,.filter 的不同组合,但这些似乎都不起作用。

解决方法

您可以获得 "CollarSize" 个词条和 "banana" 个词条

var response = client.Search<object>(/** your query here **/);

var collarSizeSignificantTermsAgg = response.Aggregations.Filter("CollarSize").Nested("VariantsProperties").Terms("CollarSize");

foreach(var bucket in collarSizeSignificantTermsAgg.Buckets)
{
    Console.WriteLine(bucket.Key);
    
    var bananaSigTerms = bucket.Terms("banana");
    
    foreach(var subBucket in bananaSigTerms.Buckets)
    {
        Console.WriteLine($"key: {subBucket.Key},doc_count: {subBucket.DocCount}");
    }
}

哪个打印

CollarSize
key: 15,doc_count: 7
key: 16,doc_count: 7
key: 17,doc_count: 6
key: 18,doc_count: 6
key: LAR,doc_count: 2
key: MED,doc_count: 2
key: SML,doc_count: 2
key: X.L,doc_count: 2
key: XXL,doc_count: 2
key: 15.5,doc_count: 1
key: 16.5,doc_count: 1
key: XXXL,doc_count: 1
Colour
key: Blue,doc_count: 7
key: White,doc_count: 7

这是一个完整的示例,使用 InMemoryConnection 对响应进行存根

private static void Main()
{
    var defaultIndex = "my_index";
    var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));

    var json = @"{
    ""took"": 50,""timed_out"": false,""_shards"": {
        ""total"": 1,""successful"": 1,""skipped"": 0,""failed"": 0

    },""hits"": {
        ""total"": {
            ""value"": 9,""relation"": ""eq""

        },""max_score"": null,""hits"": []

    },""aggregations"": {
        ""filter#CollarSize"": {
            ""meta"": { },""doc_count"": 9,""nested#VariantsProperties"": {
                ""doc_count"": 53,""sterms#CollarSize"": {
                    ""doc_count_error_upper_bound"": 0,""sum_other_doc_count"": 0,""buckets"": [

                        {
                        ""key"": ""CollarSize"",""doc_count"": 39,""sterms#banana"": {
                            ""doc_count_error_upper_bound"": 0,""buckets"": [

                                    {
                                ""key"": ""15"",""doc_count"": 7

                                    },{
                                ""key"": ""16"",{
                                ""key"": ""17"",""doc_count"": 6

                                    },{
                                ""key"": ""18"",{
                                ""key"": ""LAR"",""doc_count"": 2

                                    },{
                                ""key"": ""MED"",{
                                ""key"": ""SML"",{
                                ""key"": ""X.L"",{
                                ""key"": ""XXL"",{
                                ""key"": ""15.5"",""doc_count"": 1

                                    },{
                                ""key"": ""16.5"",{
                                ""key"": ""XXXL"",""doc_count"": 1

                                    }
                                ]
                            }
                    },{
                        ""key"": ""Colour"",""doc_count"": 14,""buckets"": [

                                    {
                                ""key"": ""Blue"",{
                                ""key"": ""White"",""doc_count"": 7

                                    }
                                ]
                            }
                    }
                    ]
                }
            },""sterms#CollarSize"": {
                ""doc_count_error_upper_bound"": 0,""buckets"": []

            }
        }
    }
}
";

    var settings = new ConnectionSettings(pool,new InMemoryConnection(Encoding.UTF8.GetBytes(json)))
        .DefaultIndex(defaultIndex);

    var client = new ElasticClient(settings);
    var response = client.Search<object>(s => s);

    var collarSizeSignificantTermsAgg = response.Aggregations.Filter("CollarSize").Nested("VariantsProperties").Terms("CollarSize");

    foreach (var bucket in collarSizeSignificantTermsAgg.Buckets)
    {
        Console.WriteLine(bucket.Key);

        var bananaSigTerms = bucket.Terms("banana");

        foreach (var subBucket in bananaSigTerms.Buckets)
        {
            Console.WriteLine($"key: {subBucket.Key},doc_count: {subBucket.DocCount}");
        }
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...