当前位置: 首页 > 知识库问答 >
问题:

ElasticSearch:嵌套字段和聚合

黄宏旷
2023-03-14

我看到一些关于嵌套字段和聚合的帖子,但它们似乎都没有回答我的问题。所以,如果这是一个重复的问题,请原谅,如果有任何帮助,我们将不胜感激。

我们建立了一个讲座索引,讲座具有以下特点:

  • 讲座可以是面对面(现场)或预先录制(在线)
  • 每个讲座可以有多个章节
  • 这些章节中的每一个都可以由不同的讲师讲解(例如:量子物理的第一章可以由五个不同的讲师讲解,其中三个可能是现场直播,另外两个可能在线)
  • 在线讲座每个讲师每章每个质量总是有一个条目

大致结构如下:

{
  "topics": [
    {
      "id": "TOP1",
      "chapters": [
        {
          "chapterId": 12345,
          "availability": [
            {
              "type": "LIVE",
              "lecturer": "Dr. Abraham Fisher",
              "lectureChapterId": "861731",
              "availableFrom": "2017-09-11 13:00:00",
              "expiresAt": "2017-09-11 15:00:00",
              "lecturerIds": [
                "MON121",
                "MEL122"
              ]
            },
            {
              "type": "LIVE",
              "lecturer": "Dr. Bob Fisher",
              "lectureChapterId": "181751",
              "availableFrom": "2017-09-11 20:00:00",
              "expiresAt": "2017-09-11 22:00:00",
              "lecturerIds": [
                "MON122",
                "MEL123"
              ]
            },
            {
              "type": "LIVE",
              "lecturer": "Dr. Bob Fisher",
              "lectureChapterId": "181751",
              "availableFrom": "2017-09-17 20:00:00",
              "expiresAt": "2017-09-17 22:00:00",
              "lecturerIds": [
                "MON122",
                "MEL123"
              ]
            },
            {
              "type": "LIVE",
              "lecturer": "Dr. Abraham Fisher",
              "lectureChapterId": "861731",
              "availableFrom": "2017-09-17 13:00:00",
              "expiresAt": "2017-09-17 15:00:00",
              "lecturerIds": [
                "MON121",
                "MEL122"
              ]
            },
            {
              "type": "ONLINE",
              "quality" : "HD",
              "price" : 19.99,
              "lecturer": "Dr. Catherine Fisher",
              "lectureChapterId": "9127312",
              "availableFrom": "2017-01-17 00:00:00",
              "expiresAt": "2017-12-31 23:59:59",
              "lecturerIds": [
                "MON120",
                "MEL120"
              ]
            },
           {
              "type": "ONLINE",
              "quality" : "SD",
              "price" : 10.99,
              "lecturer": "Dr. Catherine Fisher",
              "lectureChapterId": "9127312",
              "availableFrom": "2017-01-17 00:00:00",
              "expiresAt": "2017-12-31 23:59:59",
              "lecturerIds": [
                "MON120",
                "MEL120"
              ]
            }
          ]
        }
      ]
    }
  ]
}

现在,如果要求只返回按章节分组的第一个可用讲座的详细信息,现场讲座的讲师,并返回所有在线讲座(以及讲座主题的其他元数据),最好的方法是什么?在上面的例子中,亚伯拉罕·费希尔博士和鲍勃·费希尔博士在9月11日的讲座应该被返回。

我尝试使用internal_点击,但显然,它不允许聚合(我得到以下错误)。

"[nested] query does not support [aggs]"

P、 S:聚合需要在章节级别,而不是讲座主题(根)级别。

共有1个答案

万俟玉书
2023-03-14

你能提出你的问题吗?对于嵌套字段的聚合,始终需要指定嵌套路径。看见https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-nested-aggregation.html

我不知道您的完整数据模型,但如果您可以控制文档结构,并且只需要用于搜索,则可以尝试通过反规范化将其更平坦一些。

 类似资料:
  • 在这里,我得到了错误: “无效的术语聚合顺序路径[price>price>price.max]。术语桶只能在子聚合器路径上排序,该路径由路径中的零个或多个单桶聚合和路径末尾的最终单桶或度量聚合组成。子路径[price]指向非单桶聚合” 如果我按持续时间聚合排序,查询可以正常工作,如 那么,有什么方法可以通过嵌套字段上的嵌套聚合来排序聚合吗?

  • 问题内容: 我想获得一个请求数据来构建这样的东西: 首先,我在Elasticsearch上进行映射,如下所示: 然后我添加对象,如下所示。在将许多属性。如果笔记本电脑有许多端口,则每个端口都是中的另一个阵列。 现在我想要这样的结果: 我接近解决问题(我下面的查询),但在第二级聚集我所有的值(例如,在“决议”我有,和)。我想有只,并具有其他关键值,对只,以及其他价值具有关键。 问题答案: 你需要改变

  • 我无法使elasticsearch聚合+筛选器处理嵌套字段。数据模式(相关部分)如下所示: 本质上,“RB”对象包含一个名为“project”的嵌套字段,该字段包含另外两个字段--“name”和“age”。我正在运行的查询: 该查询应该生成与日期筛选器匹配的前10个项目(project.name字段),按其年龄中值排序,忽略数据库中提及次数少于5次的项目。中位数应仅用于匹配筛选器(日期范围)的项目

  • 如何聚合一个值在嵌套在Elasticsearch嵌套位置?我对一个嵌套对象没有问题,但在嵌套对象内的嵌套我感到困惑... 样本数据: 欲望结果: 在索引映射中,我将cat_a和条目字段的类型设置为嵌套,当我从工具字段查询聚合时,在cat_a的根(级别1)中没有问题,并且可以工作,但是在聚合中在rx_a(这是在第2级)我不能检索结果,它或空或显示错误,因为我的错误查询。 查询级别1 agg: 如何处

  • 问题内容: 我只想获取嵌套字段,但不能,因为它不是叶字段。 我在下面尝试过,但是无法匹配嵌套对象中的每个ID和名称。 结果: 这是我的预期结果: 问题答案: 如果您没有某个查询应以某种方式匹配嵌套字段,则可以这样进行: 如果您还有一个查询,并且想返回 匹配 的 嵌套文档,则 可以这样操作(使用):

  • 我将Elasticsearch 6与PHP结合使用。 我的文档有一个嵌套字段,如下所示: 基本上每个文档都有很多价格,但我知道每个文档只有一个价格与过滤器/查询匹配。 我用它来搜索和排序,改编自这里的教程:https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-sorting.html(对PHP数组格式表示抱歉): 我得