我有一个假设的ElasticSearch索引,其中包含有关各种系统上用户配置的信息。所有系统的配置均使用相同的字段/值,用户具有一组默认配置选项,如果未为系统设置自定义选项,将使用这些默认配置选项,并且为了减少空间,我想避免重复默认值。

考虑以下示例ElasticSearch文档源对象:

{
  userId: 12345,
  default: {
    columnWidth: 250,
    rowHeight: 100,
    pageSize: 50,
    autoRefreshInterval: 60
  },
  systems: {
    systemA: {
      autoRefreshInterval: 0,
      pageSize: 500
    },
    systemB: {
      columnWidth: 400
    }
  }
}

通过userID提取此文档非常容易,但是如果我想对用户如何使用系统进行一些查询怎么办?如果我想找到所有不对systemB使用自动刷新的用户,我将不得不查询systems.systemB.autoRefreshInterval:0 OR (_missing_:systems.systemB.autoRefreshInterval AND default.autoRefreshInterval:0),它很冗长,并且一次查询多个属性是一场噩梦。有什么方法可以配置索引映射以设置默认或后备字段,这将允许我简单地查询systems.systemB.autoRefreshInterval:0并取回该文档,因为默认值设置正确吗?

最佳答案

经过大量阅读文档,论坛和询问之后,我确定这不是ElasticSearch支持的用例。为了做到这一点,我要么不得不处理额外的存储空间,然后将默认值复制到各个系统,要么编写一些非常冗长而丑陋的查询。

10-06 10:25