文档(产品)结构如下:
{
"id": 112,
....
"options": [
{
"in_stock": true,
"op_values": [
{
"name": "Color",
"value": "Red"
}
],
....
},
{
"in_stock": false,
"op_values": [
{
"name": "Color",
"value": "Blue"
}
],
....
}
}
字符串
我尝试聚合stock中的所有“op_values”,但是当我添加in_stock term时,它过滤了顶级文档,并且我在bucket中没有结果。
它只是一个大查询的一部分,以便更容易阅读:
..... .....
"aggs": {
"filter": {
"bool": {
"should": [
{
"term": {
"options.in_stock": {
"value": true,
"boost": 1
}
}
},
{
"term": {
"options.op_values.name": {
"value": "Color",
"boost": 1
}
}
}
]
}
},
}
....
型
假设我只有一个文档,具有不同的股票字段值,当我聚合时,我只需要看到股票:true值,但我看到两者或没有,取决于in_stock过滤器
内心的碰撞可能是解决方案吗?我不能使聚合与内部命中一起工作,我是不是在尝试做一些ES不可能做的事情?
1条答案
按热度按时间8zzbczxx1#
查看嵌套对象。这将使您的选项成为elasticsearch中单独文档的列表,并允许执行此类操作。
https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html
https://linuxhint.com/elasticsearch-nested-query/
已更新:假设你有这样的数据
字符串
你想得到这样的结果。所以你有颜色,但只有库存。对吗?
为此,我使用了这个聚合。
型
有点大:),但希望符合你的要求。