elasticsearch—嵌套ElasticSearch中的嵌套聚合

zy1mlcev  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(2)|浏览(255)

在我的弹性文档中,我有cityid,rootid,rootname,price。

Name and id of root which has minimum price in a City.
top 7 roots:- roots those have max number of entry in a City.

例如:-

CityId RootId RootName Price
11      1       ABC      90
11      1       ABC      100
11      2       DEF      80
11      2       DEF      90
11      2       DEF      60

cityid=11的答案:-

RootId RootName Price
2       DEF      60
1       ABC      90
kninwzqo

kninwzqo1#

我不知道嵌套的语法。添加json格式的工作示例。
索引Map:

{
  "mappings":{
    "properties":{
      "listItems":{
        "type":"nested"
      }
    }
  }
}

索引数据:

{
    "RootId": 2,
    "CityId": 11,
    "RootName": "DEF",
    "listItems": [
        {
            "Price": 60
        },
        {
            "Price": 90
        },
        {
            "Price": 80
        }
    ]
}
{
    "RootId": 1,
    "CityId": 11,
    "RootName": "ABC",
    "listItems": [
        {
            "Price": 100
        },
        {
            "Price": 90
        }
    ]
}

搜索查询:

{
    "size": 0,
    "aggs": {
        "id_terms": {
            "terms": {
                "field": "RootId"
            },

            "aggs": {
                "nested_entries": {
                    "nested": {
                        "path": "listItems"
                    },
                    "aggs": {
                        "min_position": {
                            "min": {
                                "field": "listItems.Price"
                            }
                        }
                    }
                }
            }
        }
    }
}

搜索结果:

"aggregations": {
    "id_terms": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": 1,
          "doc_count": 1,
          "nested_entries": {
            "doc_count": 2,
            "min_position": {
              "value": 90.0
            }
          }
        },
        {
          "key": 2,
          "doc_count": 1,
          "nested_entries": {
            "doc_count": 3,
            "min_position": {
              "value": 60.0
            }
          }
        }
      ]
    }
  }
fnatzsnv

fnatzsnv2#

.Query(query => query.Bool(bQuery => bQuery.Filter(
                    fQuery => fQuery.Terms(ter => ter.Field(f => f.CityId).Terms(cityId))
                )))
                .Aggregations(agg => agg.Terms("group_by_rootId", st => st.Field(o => o.RootId)
                        .Order(TermsOrder.CountDescending)
                        .Aggregations(childAgg => childAgg.Min("min_price_in_group", m =>m.Field(p=>p.Price))
                                .TopHits("stocks", t11 => t11
                                .Source(sfd => sfd.Includes(fd => fd.Fields(Constants.IncludedFieldsFromElastic)))
                                .Size(1)
                            )
                        )
                    )
                )
                .Size(_popularStocksCount)
                .From(0)
                .Take(0);

相关问题