【问题标题】:Filter on aggregated bucket keys?过滤聚合的存储桶键?
【发布时间】:2017-02-24 20:20:05
【问题描述】:

给定这样的数据模型结构,

{
    Id: 123,
    "string_facet": [
        {
            "name": "make",
            "value": "Audi"
        },
        {
            "name": "carListType",
            "value": "PERSON EU"
        },
        {
            "name": "modelType",
            "value": ""
        },
        {
            "name": "engineBrand",
            "value": "APT"
        },
        {
            "name": "typeDescription",
            "value": "8D2"
        }
    ],
    "number_facet": [
        {
            "name": "typeNumber",
            "value": 4614
        },
        {
            "name": "serialNumber",
            "value": 2
        },
        {
            "name": "engineSize",
            "value": 18
        },
        {
            "name": "horsePower",
            "value": 125
        },
        {
            "name": "kw",
            "value": 92
        },
        {
            "name": "engineVolume",
            "value": 1781
        },
        {
            "name": "listType",
            "value": 0
        }
    ],
    "dateTime_facet": [
        {
            "name": "fromDate",
            "value": "1999-04-01T00:00:00"
        },
        {
            "name": "toDate",
            "value": "2000-10-01T00:00:00"
        }
    ]    
}

我想获取聚合方面名称和每个名称的值。但是,我只对具有特定名称的方面感兴趣,例如:makeengineBrand。请注意,构面是嵌套类型的。

我尝试了以下 .NEST 表达式,但它仍然返回所有方面名称。

.Global("global", g => g
    .Aggregations(ag => ag
        .Filter("global_makes", f => f
            .Filter(ff => ff
                .Nested(n => n
                .Path("string_facet")
                .Filter(pf => pf.Term("string_facet.name", "make")))
                )
                .Aggregations(agg => agg
                    .Nested("nested_string_facet", nested => nested
                        .Path("string_facet")
                        .Aggregations(stringFacet => stringFacet
                            .Terms("name", nameAgg => nameAgg.Field("string_facet.name").Size(0)
                                .Aggregations(nameAggNext => nameAggNext
                                    .Terms("value", valueAgg => valueAgg.Field("string_facet.value").Size(0))
                                )
                            )
                        )
                    )
                )
            )
        )
    )
);

我在全局中有一个过滤器(以丢失传入查询的范围),然后仅过滤匹配“make”的 string_facet.name,但结果仍然包括所有其他名称。如何过滤聚合以仅包含 name 为“make”的存储桶?

【问题讨论】:

    标签: elasticsearch nest


    【解决方案1】:

    这有帮助。 https://github.com/elastic/elasticsearch/issues/4449

    基本上必须将过滤器部分更深入地移动到聚合中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-04
      • 2016-09-08
      • 2020-02-17
      • 2019-07-05
      • 1970-01-01
      • 2017-09-22
      • 2018-09-14
      • 2016-12-04
      相关资源
      最近更新 更多