如何在' _search'上进行类似分组的SQL?在弹性搜索中查询?
我基本上需要:
1 - 使用多个过滤器,查询等过滤一大堆项目。完成
2 - 将这些结果放入唯一category_id的存储区中。 ' CATEGORY_ID'目前被映射为' float'项目文档类型的字段。我还需要在每个桶中显示与上述过滤器匹配的项目之一。
3 - 通过这些桶进行分页
注意:项目数量:1百万,独特category_id数量:60,000
我想获取所有数据类型'项目'由一个叫做的字段分组。在结果中,我想获得所有唯一的&category; class_id'并且在该组内的每个类别中的单个项目(第一个或任何项目,无关紧要)。我希望能够使用"来自"和"尺寸"通过这些结果进行分页。
例如,如果我有数据效果:
id:1, category_id: 1, color:'blue',
id:2, category_id: 1, color:'red',
id:3, category_id: 1, color:'red',
id:4, category_id: 2, color:'blue',
id:5, category_id: 2, color:'red',
id:6, category_id: 3, color:'blue',
id:7, category_id: 3, color:'blue',
id:8, category_id: 3, color:'blue',
例如,我希望得到所有具有颜色的红色' 然后按category_id分组,并返回数据:
category_id: 1
{
item: { id:2, category_id: 1, color:'red'}
},
category_id: 2
{
item: { id:5, category_id: 2, color:'red'}
}
这是我到目前为止所做的,但它没有得到正确的热门打击,我认为它不允许多个过滤器和查询,或者是可以分页的。
GET swap/item/_search
{
"size": 0,
"aggs": {
"color_filtered_items": {
"filter": {
"and": [
{
"terms": {
"color": [
"red"
]
}
}
]
},
"aggs": {
"group_by_cat_id": {
"terms": {
"field": "category_id",
"size": 10
},
"aggs": {
"items": {
"top_hits": {
"_source": {
"include": [
"name",
"id",
"category_id",
"color"
]
},
"size": 1
}
}
}
}
}
}
}
}
黑客,解决方法,欢迎更改数据存储建议。任何帮助非常感谢。 谢谢大家:))
答案 0 :(得分:0)
以下情况应该有效,假设您不需要基于数字范围的category_id聚合。
此外,您无法对聚合结果进行分页,但随后您可以控制每个聚合的大小。
{
"aggs": {
"itemsAgg": {
"terms": {
"field": "items",
"size": 10
},
"aggs": {
"categoryAgg": {
"terms": {
"field": "category_id",
"size": 10
}
}
}
}
}
}