我有以下一套documnets
有没有什么办法可以在弹性搜索中进行嵌套直方图搜索
{"id": 1, "regions" : 111, "category" : 6, "Price" : 957}
{"id": 2, "regions" : 111, "category" : 6, "Price" : 829}
{"id": 3, "regions" : 111, "category" : 7, "Price" : 123}
{"id": 4, "regions" : 111, "category" : 7, "Price" : 129}
{"id": 5, "regions" : 111, "category" : 8, "Price" : 351}
{"id": 6, "regions" : 111, "category" : 8, "Price" : 225}
{"id": 7, "regions" : 112, "category" : 6, "Price" : 625}
{"id": 8, "regions" : 112, "category" : 6, "Price" : 599}
{"id": 9, "regions" : 112, "category" : 7, "Price" : 256}
{"id": 10, "regions" : 112, "category" : 7, "Price" : 129}
{"id": 11, "regions" : 112, "category" : 8, "Price" : 333}
{"id": 12, "regions" : 112, "category" : 8, "Price" : 444}
{"id": 13, "regions" : 112, "category" : 9, "Price" : 199}
{"id": 14, "regions" : 112, "category" : 9, "Price" : 149}
{"id": 15, "regions" : 112, "category" : 5, "Price" : 299}
{"id": 16, "regions" : 112, "category" : 5, "Price" : 349}
我需要进行查询(可能是一些嵌套的直方图或其他)以获得以下格式的输出
每个地区都应该有最低价格的独特类别。
[{
"regions" : 111,
[{
"category" : 6,
"Price" : 829
}, {
"category" : 7,
"Price" : 123
}, {
"category" : 8,
"Price" : 225
}
]
}, {
"regions" : 112,
[{
"category" : 6,
"Price" : 599
}, {
"category" : 7,
"Price" : 129
}, {
"category" : 8,
"Price" : 333
}, {
"category" : 9,
"Price" : 149
}, {
"category" : 5,
"Price" : 299
}
]
},
]
提前谢谢
答案 0 :(得分:0)
欢迎使用StackOverflow。 ElasticSearch不会以您指定的格式精确地吐出数据。您需要使用查询来过滤您正在寻找的结果,然后遍历每个结果,将您想要的数据放入您想要的结构中。
答案 1 :(得分:0)
您可以使用_bulk
API对数据编制索引。像这样:
$ curl -XPOST localhost:9200/my_index/data/_bulk -d '{"index":{"_id":"1"}}
{"regions" : 111, "category" : 6, "Price" : 957}
{"index":{"_id":"2"}}
{"regions" : 111, "category" : 6, "Price" : 829}
{"index":{"_id":"3"}}
{"regions" : 111, "category" : 7, "Price" : 123}
{"index":{"_id":"4"}}
{"regions" : 111, "category" : 7, "Price" : 129}
{"index":{"_id":"5"}}
{"regions" : 111, "category" : 8, "Price" : 351}
{"index":{"_id":"6"}}
{"regions" : 111, "category" : 8, "Price" : 225}
'
空行对于_bulk
端点很重要,所以我使用它的方式非常有意。
然后,您将拥有一个映射为regions
,category
和Price
索引为long
值的索引。从那里,您可以使用聚合来获取您要求的直方图:
$ curl -XGET localhost:9200/my_index/_search -d '{
"aggs": {
"group_by_region": {
"terms": {
"field": "regions",
"size": 10
},
"aggs": {
"group_by_category": {
"terms": {
"field": "category",
"size": 10
},
"min_price": {
"min": {
"field": "Price"
}
}
}
}
}
}
}'
这不会像你真正提出的那样给出输出,但它会为你提供你正在寻找的价值。注意:我选择了任意尺寸。此外,名称如" group_by_region"取决于你;他们会在回复中看到一些东西,名字完全是任意的。