如何在Elastic Search中的嵌套对象上使用聚合?

时间:2018-11-08 21:47:20

标签: elasticsearch

我是弹性搜索并尝试形成查询的新手。我从弹性存储中提取信息时遇到了一些问题。下面,我正在尝试在弹性搜索查询中进行分组。.

可以说我有以下数据:

[{

    "a" : {
        "b" : "xxx",
        "c" : "yyy"
    },
    "l" : {
        "m" : "zzz",
        "n" : "sss"
    }
},
{

    "a" : {
        "b" : "xxx",
        "c" : "qqq"
    },
    "l" : {
        "m" : "ttt",
        "n" : "jjj"
    }
}
]

我想在对象“ a”中显示键“ b”的所有值为“ xxx”的行。

在上面,我有两行符合我的需要。所以我想展示以上两个。这意味着它是“ a.b分组”

如何实现该弹性搜索查询?由于我要分组的键是嵌套键,因此在形成查询时遇到了麻烦。

任何建议将不胜感激。

编辑1:

我正在寻找的不仅仅是“ a.b”键的值为“ xxx”。我想做一个小组。因此,如果在“ a.b”下有两个记录,值是“ xxx”,在“ a.b”下还有两个记录,值是“ kkk”,我希望将它们视为两个组。

在这种情况下,应该是两个json对象,每个对象都包含其特定的组结果。

类似以下内容:

{
{
    {    
        "a" : {
            "b" : "xxx",
            "c" : "yyy"
        },
        "l" : {
            "m" : "zzz",
            "n" : "sss"
        }
    },
    {
        "a" : {
            "b" : "xxx",
            "c" : "qqq"
        },
        "l" : {
            "m" : "ttt",
            "n" : "jjj"
        }
    }
},
{
    {    
        "a" : {
            "b" : "kkk",
            "c" : "..."
        },
        "l" : {
            "m" : "___",
            "n" : "---"
        }
    },
    {
        "a" : {
            "b" : "kkk",
            "c" : "..."
        },
        "l" : {
            "m" : "___",
            "n" : "---"
        }
    }
}
}

1 个答案:

答案 0 :(得分:0)

这就是我所做的。

我的聚合链具有以下顺序

Nested-> Terms Aggregation-> Reverse Nested-> Top Hits

箭头全部表示子聚合。

  def create 
    @schedule = current_user.schedules.build(schedule_params)
    @schedule.add_rooms    # <-- Add this line
    if @schedule.save 
      flash.now[:success] = "Draft Schedule Saved! Now Confirm or Edit."
      render :show
    else
    render :new
  end

这将使您能够按预期执行preg_replace。另请注意,我假设字段$maxprice = preg_replace('/[^\d]+/', '', $maxprice); 的类型为keyword。

还请注意,[^...]+仅显示前10个文档,如果希望查看所有文档,则可以增加数量。

让我知道这是否有帮助!