gpt4 book ai didi

elasticsearch - 如何汇总结果并在某些字段上创建数组

转载 作者:行者123 更新时间:2023-12-03 00:49:45 24 4
gpt4 key购买 nike

我是Elasticsearch的新手,不确定从哪里开始。

这是我在ES中的数据:

[{
product_id: "xxxyyyxx",
shop_id: "shop1",
name: "Elastic testing",
creator: "Test 1337",
price: 13
},
{
product_id: "xxxyyyxx",
shop_id: "shop2",
name: "Elastic testing",
creator: "Test 1337",
price: 10
}]

我想得到什么
{
product_id: "xxxyyyxx",
shops: ['shop1', 'shop2'],
name: "Elastic testing",
creator: "Test 1337",
min_price: 10,
max_price: 13
}

这是我到目前为止的内容,它只返回结果而不进行汇总...
query: {
multi_match: {
query: 'test',
fields: ['creator', 'name', 'info']
}
}

如果您能指出我正确的起点,我们将不胜感激。

最佳答案

看看aggregations
有一个聚合将数据分组为所谓的buckets,并且您可以在这些存储桶上使用这些聚合来计算metrics。指标的一个示例是您需要最低和最高价格。您可以嵌套聚合,以获得所需的结果。

聚合是在查询之外定义的,查询的匹配项用作输入数据。

在您的用例中,可以在名称字段上使用术语聚合,这将为您提供每个名称的存储桶。如果您随后在此存储分区中使用最大值和最小值的指标,则说明您已经拥有了所需结果的一部分。

关于shopId,您将需要嵌套另一个存储桶聚合,这将为fidel shopId的每个单个值提供一个存储桶,其中包含具有该值的所有文档。

例:

"query": { //your query here ...},
"aggs" : {
"name_term" : {
"terms" : { "field" : "name" },
"aggs" : {
"max_price" : { "max" : { "field" : "price" } },
"min_price" : { "min" : { "field" : "price" } },
"shops" : {
"terms" : { "field" : "shop_id" }
}
}
}
}

关于elasticsearch - 如何汇总结果并在某些字段上创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55577479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com