首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用父-子运行聚合索引

使用父-子运行聚合索引
EN

Stack Overflow用户
提问于 2022-09-04 13:33:47
回答 1查看 26关注 0票数 0

最近,我决定尝试将现有的非规范化索引重新索引为具有父-chid关系的新索引。我有大约1400万个家长文档,每个家长最多有400个孩子。(总共大约2.7亿个文档)

这是映射->的简化版本

代码语言:javascript
复制
{
  "mappings": {
    "_doc": {
      "properties": {
        "product_type": {
          "type": "keyword"
        },
        "relation_type": {
          "type": "join",
          "eager_global_ordinals": true,
          "relations": {
            "product_data": [
              "kpi",
              "customer"
            ]
          }
        },
        "rootdomain": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "rootdomain_sku": {
          "type": "keyword",
          "eager_global_ordinals": true
        },
        "sales_1d": {
          "type": "float"
        },
        "sku": {
          "type": "keyword",
          "eager_global_ordinals": true
        },
        "timestamp": {
          "type": "date",
          "format": "strict_date_optional_time_nanos"
        }
      }
    }
  }
}

如您所见,我使用eager_global_ordinals作为连接关系,以提高搜索性能。

(根据我的理解,这会导致全局序数中的某些连接关系计算是在索引时间内完成的,而不是在查询时完成)。

这个迁移过程帮助我将索引大小从大约500 to减少到只有40 to。它对我的用例有很大的好处,因为我每天更新很多数据。

我目前的测试环境是使用单个节点,索引只有一个主碎片。试图运行下面的聚合,似乎它永远运行-

代码语言:javascript
复制
{
  "aggs": {
    "skus_sales": {
      "aggs": {
        "sales1": {
          "children": {
            "type": "kpi"
          },
          "aggs": {
            "sales2": {
              "filter": {
                "range": {
                  "timestamp": {
                    "format": "basic_date_time_no_millis",
                    "gte": "20220601T000000Z",
                    "lte": "20220605T235959Z"
                  }
                }
              },
              "aggs": {
                "sales3": {
                  "sum": {
                    "field": "sales_1d"
                  }
                }
              }
            }
          }
        }
      },
      "terms": {
        "field": "rootdomain_sku",
        "size": 10
      }
    }
  },
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "rootdomain.keyword": "some_domain"
          }
        },
        {
          "term": {
            "product_type": "Rugs"
          }
        }
      ]
    }
  }
}

我理解亲子关系的缺点,但我似乎做错了什么。我希望能得到一些结果,即使在15分钟后,但它似乎永远运行。

我很想在这里得到一些帮助,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-11 07:51:27

问题似乎是使用单个碎片,通过增加主碎片的# (1->4),我成功地获得了一些性能提升,但它仍然运行非常(!)很长时间了。

似乎父子关系查询性能不符合我的要求,所以我尝试使用嵌套对象-通过这样做更新/索引时间将增加,但我将获得搜索/聚合性能提升。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73599830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档