我是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']
}
}
如果您能为我指明正确的起点,将不胜感激。
答案 0 :(得分:2)
看看aggregations。 有一个将您的数据分组为buckets的聚合,您可以在该存储桶上使用这些聚合来计算metrics。指标的一个示例是您需要最低和最高价格。您可以嵌套聚合,以获得所需的结果。
聚合是在查询之外定义的,查询的匹配项用作输入数据。
在您的用例中,您可以在名称字段上使用术语聚合,这将为您提供每个名称的存储桶。如果您随后在此存储分区中使用最大值和最小值的指标,则说明您已经拥有了所需结果的一部分。
关于shopIds,您将需要嵌套另一个存储桶聚合,这将为fiels 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" }
}
}
}
}
答案 1 :(得分:0)
创建ID数组的声明与声明普通字段的声明相同:
"product_id": {
"type": "keyword",
"store": "true",
"index": "true"
}
只需确保在您的类中将数组命名为product_id即可:
List<String> product_id